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,你可以实现自动化的应用部署和更新,大大提高了开发和运维的效率。

相关推荐
山林竹笋1 小时前
Docker入门常用命令总结
docker·云原生
predisw3 小时前
请求是如何通过k8s service 路由到对应的pod
云原生·容器·kubernetes·cloud native
学Linux的语莫5 小时前
docker基本概念,docker镜像管理,docker命令
docker
迷茫运维路6 小时前
graylog+sidecar通过docker-compose部署并采集SSH登录日志
运维·docker·ssh·graylog·pipelines
程序猿零零漆6 小时前
SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令
spring cloud·docker·微服务
cv小白菜6 小时前
容器化部署算法服务技术文档
python·ubuntu·docker
花姐夫Jun8 小时前
基于CentOS的Docker + Nginx + Gitee + Jenkins部署总结
nginx·docker·centos·jenkins
shelby_loo8 小时前
在Ubuntu下通过Docker部署MySQL服务器
服务器·ubuntu·docker
檀越剑指大厂9 小时前
【fnOS使用Docker快速搭建WordPress站点并免费配置公网地址】
运维·docker·容器
u01005596010 小时前
sudo mkdir -p /etc/docker其中的 -p 什么意思?
运维·docker·容器