4. docker容器编排

1. 什么是容器编排

容器编排(Container Orchestration):自动化管理大量容器的生命周期,包括:

  1. 部署(Deploy):一次性启动多个容器。
  2. 扩缩容(Scale):按需调整副本数。
  3. 网络(Networking):不同容器之间的网络互通。
  4. 存储(Storage):共享存储卷。
  5. 故障恢复(Health check & Restart):容器挂了自动拉起。

常见编排工具:

  1. 单节点:Docker Compose
  2. 多节点:Docker Swarm、Kubernetes(K8s)

2. Docker Compose(单节点编排)

1. 安装
# macOS / Linux 一般 Docker Desktop 自带
docker compose version

# 如果没有,单独安装
sudo apt-get install docker-compose-plugin
2. 基本思想

使用 docker-compose.yml 描述多个容器的服务、网络、卷
一条命令即可启动 / 停止整个应用栈。

3. 典型 yml 文件
version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:
4. Compose 命令与常见 flags
# 启动所有服务
docker compose up -d

# 停止
docker compose down

# 查看运行状态
docker compose ps

# 扩容服务(例如 web 服务启动 3 个副本)
docker compose up -d --scale web=3

# 查看日志
docker compose logs -f web
# 常用 flags:
# -d → 后台运行
#--scale → 设置副本数量
#--build → 强制重新构建镜像

3. Docker Swarm(多节点编排)

1. 什么是 Swarm

Swarm 是 Docker 自带的分布式编排引擎。
特点:集群化、多节点、内置服务发现、负载均衡。
与 Kubernetes 相比更轻量,但功能较少。

2. Swarm 集群管理
# 初始化 Swarm
docker swarm init

# 让其他节点加入
docker swarm join --token <worker_token> <manager_ip>:2377

# 查看集群信息
# docker info
# docker node ls
# Manager 节点:负责调度与管理。
# Worker 节点:运行具体容器。
3. Node 管理
# 查看节点
docker node ls

# 设置角色(manager / worker)
docker node promote <node_id>
docker node demote <node_id>

# 节点维护(不再调度任务)
docker node update --availability drain <node_id>
4. Service 管理
# 创建服务(部署容器)
docker service create --name myweb -p 8080:80 nginx

# 查看服务
docker service ls

# 查看服务详细信息
docker service ps myweb

# 扩缩容
docker service scale myweb=5

# 更新服务镜像
docker service update --image nginx:alpine myweb
# Swarm 中,Service = 应用的逻辑单元,相当于 Compose 的 service,但支持分布式。
5. Stack 管理(类似 Compose)
# 部署一个 stack(类似 docker-compose.yml)
docker stack deploy -c docker-compose.yml mystack

# 查看 stack
docker stack ls

# 查看 stack 里的服务
docker stack services mystack

# 删除 stack
docker stack rm mystack

更多推荐