温馨提示×

如何用ubuntu进行docker容器编排

小樊
57
2025-08-29 17:40:05
栏目: 智能运维

Ubuntu环境下Docker容器编排的常用方法
在Ubuntu系统中,容器编排主要通过Docker Compose(轻量级多容器管理)和Kubernetes(生产级大规模编排)实现,以下是具体操作步骤:

一、Docker Compose编排(适合小型/中型多容器应用)

Docker Compose通过docker-compose.yml文件定义多容器服务,简化了多容器应用的启动、停止和管理流程。

1. 安装Docker与Docker Compose

  • 安装Docker
    更新软件包索引并添加Docker官方源,安装Docker CE(社区版):
    sudo apt update
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl enable --now docker  # 启动Docker并设置开机自启
    
  • 安装Docker Compose
    下载最新版本的Docker Compose二进制文件并赋予执行权限:
    sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
    验证安装:
    docker-compose --version  # 输出版本号即表示成功
    

2. 编写docker-compose.yml文件

在项目目录下创建docker-compose.yml文件,定义服务、镜像、端口、环境变量等配置。例如,部署一个包含Nginx(Web服务)和PostgreSQL(数据库)的应用:

version: '3.8'  # 指定Compose文件格式版本
services:
  web:  # Web服务(Nginx)
    image: nginx:latest  # 使用官方Nginx镜像
    ports:
      - "80:80"  # 将主机80端口映射到容器80端口
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载主机./html目录到容器内Nginx默认网页目录
    depends_on:
      - db  # 依赖db服务(Nginx启动前需确保db服务已启动)

  db:  # 数据库服务(PostgreSQL)
    image: postgres:15-alpine  # 使用轻量级Alpine版PostgreSQL
    environment:
      POSTGRES_DB: mydb  # 创建数据库名
      POSTGRES_USER: admin  # 创建用户名
      POSTGRES_PASSWORD: 123456  # 设置密码
    volumes:
      - postgres_data:/var/lib/postgresql/data  # 持久化数据库数据到卷
volumes:
  postgres_data:  # 定义数据卷(用于持久化数据)

3. 管理容器服务

  • 启动服务:在docker-compose.yml所在目录运行以下命令,后台启动所有服务:
    docker-compose up -d
    
  • 查看服务状态
    docker-compose ps  # 查看运行中的服务
    docker-compose logs -f web  # 查看web服务的实时日志
    
  • 停止/删除服务
    docker-compose down  # 停止并删除所有容器、网络;保留数据卷(若需彻底删除卷,添加`-v`参数)
    
  • 扩展服务:例如将web服务扩展到3个实例:
    docker-compose up -d --scale web=3
    

4. 关键功能说明

  • 数据卷:通过volumes配置实现数据持久化(如数据库数据),避免容器删除后数据丢失。
  • 环境变量:通过environment配置传递敏感信息(如数据库密码),避免硬编码。
  • 服务依赖:通过depends_on定义服务启动顺序(仅保证启动顺序,不保证服务就绪,需结合健康检查使用)。

二、Kubernetes编排(适合大型/生产级应用)

Kubernetes(简称K8s)是开源的容器编排平台,提供自动化部署、扩展、负载均衡等功能,适合管理大规模容器集群。

1. 环境准备

  • 安装Docker:同Docker Compose步骤中的安装方法。
  • 禁用Swap:Kubernetes要求禁用Swap分区(临时禁用+永久禁用):
    sudo swapoff -a  # 临时禁用
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  # 永久禁用(注释掉fstab中的Swap行)
    
  • 加载内核模块:允许容器网络桥接和IP转发:
    sudo modprobe overlay
    sudo modprobe br_netfilter
    sudo tee /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    EOF
    sudo sysctl --system  # 生效配置
    

2. 安装Kubernetes组件

  • 添加Kubernetes源并安装组件
    sudo apt update
    sudo apt install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl  # 锁定版本(避免自动升级)
    

3. 部署Kubernetes集群

  • 初始化Master节点
    在Master节点上运行以下命令,初始化集群(--pod-network-cidr指定Pod网络CIDR,需与后续网络插件匹配):
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    
    初始化完成后,会输出配置kubectl和加入Worker节点的命令(需保存)。
  • 配置kubectl
    将Admin配置文件复制到当前用户目录,并设置权限:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 安装网络插件
    Kubernetes需要网络插件实现Pod间通信(如Calico、Flannel),这里以Calico为例:
    kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
    kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    
    验证网络插件是否运行:
    kubectl get pods -n calico-system  # 所有Pod状态应为Running
    
  • 加入Worker节点
    在Master节点初始化完成后,会输出类似以下的加入命令:
    kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxx
    
    在Worker节点上运行该命令,即可将节点加入集群。

4. 验证集群状态

  • 查看节点状态
    在Master节点运行以下命令,确认所有节点状态为Ready
    kubectl get nodes
    
  • 部署示例应用
    部署一个Nginx应用,创建nginx-deployment.yaml文件:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3  # 创建3个Pod副本
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      labels:
        app: nginx
    spec:
      type: NodePort  # 暴露为NodePort类型(外部可通过节点IP访问)
      ports:
      - port: 80
        targetPort: 80
        nodePort: 30080  # 节点端口(范围30000-32767)
      selector:
        app: nginx
    
    应用配置:
    kubectl apply -f nginx-deployment.yaml
    
    验证部署:
    kubectl get pods  # 查看Pod状态(应为Running)
    kubectl get svc  # 查看Service状态(NodePort为30080)
    
    访问应用:在浏览器输入http://<Master节点IP>:30080,即可看到Nginx欢迎页面。

5. 常用管理命令

  • 查看资源kubectl get pods(Pod)、kubectl get svc(Service)、kubectl get nodes(节点)。
  • 查看详情kubectl describe pod <pod-name>(查看Pod详情)、kubectl logs <pod-name>(查看Pod日志)。
  • 删除资源kubectl delete -f nginx-deployment.yaml(删除指定配置的资源)、kubectl delete pod <pod-name>(删除Pod)。
  • 扩展应用kubectl scale deployment nginx-deployment --replicas=5(将Nginx副本数扩展到5个)。

总结

  • Docker Compose:适合快速部署和管理多容器应用(如开发、测试环境),通过docker-compose.yml文件简化配置,支持服务依赖、数据卷、环境变量等功能。
  • Kubernetes:适合生产级大规模容器集群管理,提供自动化调度、扩展、负载均衡、自我修复等高级功能,但学习曲线较陡峭,需要掌握Pod、Deployment、Service、ConfigMap等核心概念。

根据应用场景选择合适的编排工具:小型项目推荐Docker Compose,大型生产环境推荐Kubernetes。

0