Docker Engine 的 Swarm 模式是内置于 Docker 的原生集群编排功能,≥1.12 版本即可通过一条命令启用;含 Manager(负责编排与高可用)和 Worker(运行任务)两类节点;以服务(Service)为调度单元,支持声明式部署、DNS 负载均衡、滚动更新;依托 overlay 网络实现跨主机通信,存储需外接方案;默认 TLS 加密,支持 secret/config 安全管理,适合中小规模场景。

Docker Engine 的 Swarm 模式不是独立产品,而是内置于 Docker Engine 本身的一套原生集群编排能力。它让多个 Docker 主机(节点)组成一个统一的、去中心化管理的集群,无需额外安装 Kubernetes 或第三方调度器。关键在于“开箱即用”——只要 Docker 版本 ≥ 1.12(推荐 ≥ 20.10),启用 Swarm 模式只需一条命令。
Swarm 集群的核心角色:Manager 与 Worker
Swarm 集群中节点分为两类,职责明确且可动态调整:
- Manager 节点:负责集群状态维护、服务编排、任务分发、Raft 共识(用于高可用)、API 响应。至少需要 1 个,生产环境建议 3 或 5 个(奇数个以保障容错);超过 1 个时自动形成 Manager 集群,故障后自动选举新 Leader。
- Worker 节点:只运行分配给它的容器任务(即 service tasks),不参与集群决策。可无限水平扩展,适合承载实际业务负载。
一个节点可以同时是 Manager 和 Worker(默认初始化时即如此),也可通过 docker node demote 或 docker node promote 切换角色。
服务(Service)是 Swarm 的核心调度单元
Swarm 不直接操作单个容器(docker run),而是面向声明式服务(docker service create)。服务定义了“要运行什么镜像、多少副本、如何暴露端口、挂载哪些卷、满足哪些约束条件”等策略。
- 服务自动实现副本伸缩(replicated mode)或全局部署(global mode);
- 内置 DNS 负载均衡:集群内任意节点访问
service-name,DNS 自动解析为该服务所有运行中 task 的 IP,请求被轮询分发; - 滚动更新与回滚:支持设置更新延迟、失败阈值、并行数,更新过程平滑,出错可一键回退到上一版本。
网络与存储:跨节点协同的关键支撑
Swarm 内置覆盖网络(overlay network)和本地网络驱动,使容器跨主机通信透明化:
- 创建 overlay 网络(如
docker network create -d overlay mynet)后,接入该网络的服务容器无论落在哪个节点,均可通过服务名直接通信; - 网络控制平面由 Manager 节点通过 VXLAN 封装协调,数据平面由各节点上的
dockerd和libnetwork协同完成; - 持久化存储依赖外部方案(如 NFS、Ceph、云厂商卷),Swarm 本身不提供分布式存储,但可通过 volume driver 插件集成,并在 service 中声明绑定方式(
--mount type=volume)。
安全与部署实践要点
Swarm 默认启用 TLS 加密通信(Manager 间、Manager-Worker 间),证书由集群自动生成并轮换:
- 首次
docker swarm init会生成 root CA、Manager/Worker 证书及加入令牌(token),需妥善保管; - Worker 加入集群必须使用
docker swarm join --token SWMTKN-...,Manager 加入需用专用 Manager token,二者权限隔离; - 敏感配置(密码、密钥)应使用
docker config或docker secret管理,secret 只会在 task 启动时注入内存,不落盘、不暴露给其他容器。
Swarm 架构轻量、可靠、与 Docker 工具链深度整合,适合中小规模微服务部署或边缘集群场景。它不追求 Kubernetes 的极致扩展性与生态丰富度,但胜在简单可控、学习成本低、运维负担小。










