温馨提示×

ubuntu下docker如何进行容器编排

小樊
46
2025-10-03 22:45:43
栏目: 智能运维

Ubuntu下Docker容器编排的常用方法及实践

一、Docker Compose:轻量级多容器编排工具(推荐)

Docker Compose是Ubuntu下最常用的容器编排工具之一,通过docker-compose.yml文件定义多容器应用的服务、网络、卷等配置,实现一键启动、停止和管理。

1. 安装Docker与Docker Compose

  • 清理旧版本:避免冲突,先移除系统自带的旧版Docker包:
    sudo apt remove -y docker.io docker-compose docker-compose-v2
    
  • 安装Docker Engine:通过官方APT源安装最新稳定版:
    sudo apt update
    sudo apt install -y ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.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 docker-compose-plugin
    
  • 验证安装:检查Docker和Compose版本:
    docker --version  # 应输出类似 Docker version 24.x.x
    docker compose version  # 应输出类似 Docker Compose version v2.x.x
    

2. 编写docker-compose.yml文件

在项目目录(如~/myapp)中创建docker-compose.yml,定义服务、环境变量、网络、卷等配置。示例如下:

version: "3.8"  # 指定Compose文件格式版本
services:
  web:  # 服务名称(自定义)
    image: nginx:latest  # 使用官方Nginx镜像
    ports:
      - "80:80"  # 将宿主机80端口映射到容器80端口
    depends_on:
      - db  # 定义服务依赖(web启动前需先启动db)
  db:  # 数据库服务
    image: postgres:15  # 使用PostgreSQL 15镜像
    environment:
      POSTGRES_PASSWORD: mysecretpassword  # 设置环境变量(数据库密码)
    volumes:
      - db-data:/var/lib/postgresql/data  # 持久化数据(挂载卷)
volumes:
  db-data:  # 自定义卷名称(用于数据持久化)

3. 常用命令管理容器

  • 启动服务:在docker-compose.yml所在目录运行,-d表示后台运行:
    docker compose up -d
    
  • 停止服务:停止并删除所有容器、网络(保留卷和镜像):
    docker compose down
    
  • 查看状态:列出所有服务的运行状态:
    docker compose ps
    
  • 查看日志:查看指定服务(如web)的日志输出:
    docker compose logs -f web  # -f表示实时跟踪日志
    
  • 进入容器:进入web服务的容器内部(执行bash):
    docker compose exec web /bin/bash
    
  • 重建镜像:若修改了build指令或Dockerfile,需重建服务镜像:
    docker compose build
    

4. 关键功能扩展

  • 环境变量分离:将敏感信息(如数据库密码)存入.env文件,避免硬编码:

    # .env文件内容
    POSTGRES_PASSWORD=mysecretpassword
    

    修改docker-compose.yml中的环境变量引用:

    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}  # 引用.env文件中的变量
    
  • 自定义网络:创建专用网络实现服务间通信(默认使用bridge网络):

    networks:
      my-network:
        driver: bridge
    services:
      web:
        networks:
          - my-network
      db:
        networks:
          - my-network
    

    服务间可通过服务名访问(如web服务访问db服务的PostgreSQL端口:postgres://db:5432)。

  • 卷持久化:通过volumes指令将容器内目录挂载到宿主机,防止数据丢失(如数据库数据、应用日志):

    volumes:
      - ./logs:/var/log/nginx  # 将宿主机./logs目录挂载到容器/var/log/nginx
      - db-data:/var/lib/postgresql/data  # 使用命名卷(推荐)
    

二、Docker Swarm:原生集群编排(适用于生产环境)

若需要跨主机部署高可用集群,可使用Docker Swarm(Docker原生集群管理工具),支持服务扩缩容、负载均衡、故障转移等功能。

1. 初始化Swarm集群

管理节点(如Ubuntu服务器)上运行以下命令,初始化Swarm:

docker swarm init --advertise-addr <MANAGER-IP>  # 替换为管理节点的实际IP

输出结果会显示加入集群的命令(包含Token),用于将工作节点加入集群。

2. 加入工作节点

工作节点(其他Ubuntu服务器)上运行管理节点输出的命令,加入Swarm集群:

docker swarm join --token <SWARM-TOKEN> <MANAGER-IP>:2377

3. 部署服务到Swarm集群

使用docker service create命令部署服务,示例如下:

docker service create --name web --replicas 3 -p 80:80 nginx:latest
  • --name web:服务名称(自定义);
  • --replicas 3:创建3个服务实例(实现高可用);
  • -p 80:80:将宿主机80端口映射到容器80端口;
  • nginx:latest:使用的镜像。

4. 管理Swarm服务

  • 查看服务状态:列出所有服务及其副本数:
    docker service ls
    
  • 查看服务详情:查看web服务的详细信息(包括节点分布、端口映射):
    docker service inspect --pretty web
    
  • 扩展服务:增加服务实例数(如将web服务扩展到5个实例):
    docker service scale web=5
    
  • 删除服务:删除web服务及其所有实例:
    docker service rm web
    

三、选择建议

  • 开发/测试环境:优先使用Docker Compose,配置简单、操作便捷,适合单机多容器应用(如WordPress+MySQL、Nginx+Node.js)。
  • 生产环境:若需要高可用、跨主机部署,选择Docker Swarm或更成熟的集群编排工具(如Kubernetes,但配置复杂度更高)。Docker Swarm适合中小规模集群,Kubernetes适合大规模分布式系统。

0