Docker Swarm
Docker Swarm 是 Docker 官方提供的原生容器编排工具,用于将多个 Docker 主机(物理机或虚拟机)组成一个集群(称为 Swarm),以统一管理和调度容器化应用。在 Swarm 模式下,用户可以通过简单的命令或声明式配置实现高可用、负载均衡、服务扩展等生产级功能。
Swarm 模式的核心概念
-
集群(Swarm)
- 由多个 节点(Node) 组成,分为两类:
- 管理节点(Manager):负责集群状态管理、任务调度(默认也参与工作负载)。
- 工作节点(Worker):仅执行容器任务,不参与决策。
- 通过 Raft 共识算法保证管理节点的高可用(建议至少 3 个 Manager 避免脑裂)。
- 由多个 节点(Node) 组成,分为两类:
-
服务(Service)
- Swarm 的核心抽象,定义容器的期望状态(如镜像、副本数、网络、存储等)。
- 示例:运行一个 3 副本的 Nginx 服务:
docker service create --name nginx --replicas 3 -p 80:80 nginx
-
任务(Task)
- 服务的最小调度单元,每个任务对应一个运行的容器实例。Swarm 会自动将任务分配到健康的节点。
-
负载均衡与网络
- 内置 DNS 和 VIP:服务名自动解析到所有容器的虚拟 IP,请求会被均匀分发。
- Overlay 网络:跨主机的容器间通信通过加密的 overlay 网络实现。
-
滚动更新与回滚
- 支持分批次更新服务(如镜像版本升级),失败时自动回滚到上一版本。
Swarm vs. 单机 Docker
| 特性 | 单机 Docker | Docker Swarm(集群模式) |
|---|---|---|
| 规模 | 单主机 | 多主机(横向扩展) |
| 高可用 | 无 | 自动重启失败容器、节点故障转移 |
| 调度 | 手动运行容器 | 自动分配任务到最优节点 |
| 服务发现 | 需手动配置 | 内置 DNS 和负载均衡 |
| 声明式管理 | 需脚本或工具 | 通过 docker service 定义状态 |
Swarm 的典型使用场景
- Web 应用集群:通过
--replicas快速扩展无状态服务(如 API 后端)。 - 高可用数据库:结合
--placement-pref将副本分散到不同节点。 - CI/CD 流水线:动态部署测试环境,完成后自动清理。
- 边缘计算:轻量级编排,适合资源受限的设备集群。
示例命令
# 初始化 Swarm(管理节点)
docker swarm init --advertise-addr <MANAGER_IP>
# 加入工作节点
docker swarm join --token <TOKEN> <MANAGER_IP>:2377
# 部署服务
docker service create --name web --replicas 5 -p 8080:80 nginx
# 监控服务状态
docker service ps web
# 扩展副本数
docker service scale web=10
与 Kubernetes 的对比
- 优势:Swarm 更轻量、学习曲线低、完全兼容 Docker API,适合中小规模场景。
- 局限:功能不如 Kubernetes 丰富(如缺乏高级调度策略、CRD 扩展等)。
总结:Docker Swarm 模式是简化容器编排的“开箱即用”方案,适合需要快速搭建集群但不想复杂配置的场景。
浙公网安备 33010602011771号