docker和k8s实践

Docker 和 Kubernetes 是现代云原生应用开发和运维中的两个重要技术。Docker 提供容器化技术,可以将应用及其依赖打包在容器中,而 Kubernetes 则负责容器的编排、部署、伸缩和管理。以下是 Docker 和 Kubernetes 的实践指南,涵盖基础安装、配置和常见操作。

1. Docker 实践

1.1 安装 Docker

在 Linux (例如 AlmaLinux) 上安装 Docker:

bash 复制代码
# 安装 Docker 的依赖包
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

# 设置 Docker 仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io -y

# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
1.2 常用 Docker 命令
  • 查看 Docker 版本

    bash 复制代码
    docker --version
  • 拉取镜像

    bash 复制代码
    docker pull nginx:latest
  • 运行容器

    bash 复制代码
    docker run -d --name my_nginx -p 8080:80 nginx
  • 查看运行中的容器

    bash 复制代码
    docker ps
  • 停止容器

    bash 复制代码
    docker stop my_nginx
  • 删除容器

    bash 复制代码
    docker rm my_nginx
  • 构建 Docker 镜像

    创建 Dockerfile,例如:

    Dockerfile 复制代码
    FROM nginx:latest
    COPY ./index.html /usr/share/nginx/html/index.html

    然后执行:

    bash 复制代码
    docker build -t my_nginx_image .
1.3 Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用的工具,可以通过 docker-compose.yml 文件来定义应用的服务、网络、卷等。

  • 安装 Docker Compose

    bash 复制代码
    sudo dnf install docker-compose
  • 创建 docker-compose.yml 文件

    yaml 复制代码
    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "8080:80"
  • 使用 Docker Compose 启动服务

    bash 复制代码
    docker-compose up -d
  • 查看日志

    bash 复制代码
    docker-compose logs
  • 停止服务

    bash 复制代码
    docker-compose down

2. Kubernetes 实践

2.1 安装 Kubernetes

在 Linux 上安装 Kubernetes(以 AlmaLinux 为例):

  • 安装 Kubernetes 依赖

    bash 复制代码
    sudo dnf install -y kubelet kubeadm kubectl
  • 启动 Kubernetes 服务

    bash 复制代码
    sudo systemctl enable --now kubelet
  • 初始化 Kubernetes Master 节点

    bash 复制代码
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16

    这将初始化 Kubernetes 集群,并返回一个命令,你需要在其他节点上使用该命令来加入集群。

  • 配置 kubectl 访问

    运行以下命令以使 kubectl 使用当前用户的权限访问集群:

    bash 复制代码
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.2 部署网络插件

Kubernetes 集群通常需要网络插件来提供 Pod 间的网络通信。常用的网络插件有 Flannel、Calico、Weave 等。

安装 Flannel 网络插件:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.3 Kubernetes 常用命令
  • 查看集群节点

    bash 复制代码
    kubectl get nodes
  • 查看 Pod 状态

    bash 复制代码
    kubectl get pods
  • 创建 Deployment

    例如创建一个 Nginx 部署:

    bash 复制代码
    kubectl create deployment nginx --image=nginx
  • 暴露服务

    创建一个 Service 来暴露部署的应用:

    bash 复制代码
    kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看暴露的服务

    bash 复制代码
    kubectl get svc
  • 删除资源

    删除部署的服务和 Pod:

    bash 复制代码
    kubectl delete deployment nginx
    kubectl delete svc nginx
2.4 Pod 和容器的管理
  • 查看 Pod 日志

    bash 复制代码
    kubectl logs <pod_name>
  • 执行 Pod 内命令

    bash 复制代码
    kubectl exec -it <pod_name> -- /bin/bash
2.5 部署 Helm

Helm 是 Kubernetes 的包管理工具,能够简化 Kubernetes 应用的安装和管理。

  • 安装 Helm

    bash 复制代码
    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
  • 安装应用

    bash 复制代码
    helm install my-release nginx
  • 查看已安装应用

    bash 复制代码
    helm list

3. Docker 和 Kubernetes 集成实践

3.1 从 Docker 部署到 Kubernetes
  • 创建 Docker 镜像,并将其推送到 Docker Hub 或私有 Docker 仓库。

    假设已经有一个名为 myapp 的 Docker 镜像:

    bash 复制代码
    docker tag myapp <your-docker-repo>/myapp:latest
    docker push <your-docker-repo>/myapp:latest
  • 在 Kubernetes 中创建 Deployment ,通过定义一个 yaml 文件来部署应用:

    myapp-deployment.yaml

    yaml 复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: <your-docker-repo>/myapp:latest
            ports:
            - containerPort: 8080

    部署到 Kubernetes 集群:

    bash 复制代码
    kubectl apply -f myapp-deployment.yaml
  • 暴露应用

    bash 复制代码
    kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service
3.2 使用 Jenkins 自动化 CI/CD

Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化构建、测试和部署。

  • 配置 Jenkins 安装 Docker 插件,以便 Jenkins 通过 Docker 来构建镜像。
  • 创建 Jenkins pipeline,定义 CI/CD 流程,将 Docker 镜像推送到 Docker 仓库并在 Kubernetes 上自动部署。

以下是一个简化的 Jenkins Pipeline 示例:

groovy 复制代码
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    dockerImage = docker.build("myapp:${env.BUILD_ID}")
                }
            }
        }
        stage('Push') {
            steps {
                script {
                    docker.withRegistry('https://mydockerhub.com', 'my-dockerhub-credentials') {
                        dockerImage.push()
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    sh "kubectl apply -f myapp-deployment.yaml"
                    sh "kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service"
                }
            }
        }
    }
}

通过此管道配置,Jenkins 将执行以下步骤:

  1. 构建 Docker 镜像
  2. 推送镜像到 Docker Hub
  3. 使用 kubectl 在 Kubernetes 集群中部署应用并暴露服务

4. 总结

  • Docker 提供了容器化功能,使得应用能够跨平台、跨环境地运行。
  • Kubernetes 提供容器编排功能,帮助你自动化容器的部署、扩展和管理。
  • Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化的持续集成和持续部署(CI/CD)流程。

通过结合 Docker、Kubernetes 和 Jenkins,你可以实现自动化的应用部署和更新,大大提高了开发和运维的效率。

相关推荐
姚不倒6 小时前
负载均衡的概念、策略以及两个核心组件 Nginx 和 Kube-proxy 的对比。
运维·nginx·云原生·kubernetes
jingshaoqi_ccc12 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
关关长语13 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
水滴与鱼13 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
洒家肉山大魔王15 小时前
Kubernetes中Pod 处于 CrashLoopBackOff 状态(生产环境)
linux·容器·kubernetes·pod·pod循环重启
杨浦老苏16 小时前
安全的消息传递和协作工具Virola Messenger
docker·即时通讯·群晖·im
Lynnxiaowen17 小时前
今天我们学习kubernetes内容Ingress资源对象
学习·容器·kubernetes
jason成都18 小时前
emqx的docker部署
运维·docker·容器
mixboot19 小时前
docker 国内镜像源
docker·镜像源
谷粒.19 小时前
云原生时代的测试策略:Kubernetes环境下的测试实践
运维·网络·云原生·容器·kubernetes