Docker Swarm 和 Docker Compose 集群部署区别是什么

文章导读
简单说,单机开发测试用 Docker Compose,多主机生产集群用 Docker Swarm。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

简单说,单机开发测试用 Docker Compose,多主机生产集群用 Docker Swarm。

先说结论:两者定位不同,Compose 是单机多容器编排,Swarm 是原生集群管理工具。

  • 适合:本地开发、测试环境或单主机部署场景优先选 Compose。
  • 重点看:是否需要跨节点调度、高可用和负载均衡,有则选 Swarm。
  • 别忽略:Swarm 的 stack 部署不支持 build 指令,镜像需预先构建好。

命令速用版

Compose 启动:

docker-compose up -d

Swarm 初始化与部署:

docker swarm init
docker stack deploy -c docker-stack.yml myapp

为什么会这样

Docker Compose 设计初衷是定义和运行多容器应用,所有容器运行在同一 Docker 引擎实例上,适合确保应用各部分协同工作。而 Docker Swarm 是 Docker 内置的集群管理工具,它将多个 Docker 主机组成一个虚拟主机,支持跨节点容器调度、服务发现和负载均衡。

从架构上看,Swarm 包含 Manager 和 Worker 节点,Manager 负责调度,Worker 执行任务,即使 Manager 故障,Worker 上的容器仍能运行。Compose 则不涉及集群管理,没有内置的故障恢复机制。

分步处理

1. 评估场景

如果只是在本地或单台服务器上跑几个容器互调,直接用 Compose。如果需要把服务分散到多台机器,且要求某台机器宕机后服务自动迁移,才考虑 Swarm。

2. 配置文件调整

Docker Swarm 和 Docker Compose 集群部署区别是什么

Compose 使用docker-compose.yml,Swarm 部署通常使用docker-stack.yml。注意 Swarm 模式要求配置文件版本至少为 3,且支持deploy字段来设置副本数(replicas)。

3. 镜像准备

Compose 支持在配置文件中写build指令现场构建镜像。Swarm 的 stack 部署会忽略build指令,必须确保镜像已经构建好并推送到仓库,或者在节点上本地存在。

怎么验证是否生效

Compose 验证:运行docker ps能看到所有服务容器在同一主机上启动。

Swarm 验证:运行docker node ls能看到集群中的多个节点状态为 Ready。运行docker service ls能看到服务的副本分布情况。

常见坑

1. 版本兼容性:docker stack 不支持基于第 2 版写的 compose 文件,版本需为 3 及以上。

2. 构建指令失效:在 Swarm 模式下使用 stack deploy 时,配置文件中的 build 指令会被忽略,导致部署失败。

3. 网络模式:Swarm 默认使用 vip 模式为服务分配虚拟 IP,跨主机通信需要配置覆盖网络(overlay network)。

参考来源

  • 阿里云开发者社区:Docker Swarm 和 Docker Compose 集群模式怎么选?
  • 阿里云开发者社区:Docker Compose 从入门配置到多容器部署实战
  • 阿里云开发者社区:Docker 三大编排工具 Compose Swarm Kubernetes 对比与选择
  • 阿里云开发者社区:Docker Stack 部署应用及搭建 Docker 私有仓库