Docker Swarm 介绍与选型指南
介绍 Docker Swarm(Swarm mode):内置 Docker Engine 的集群编排,Manager/Worker 与 Raft 一致性、声明式服务模型、overlay 网络与路由网格、默认 TLS 安全与滚动更新,快速上手示例,量化对比 Kubernetes、Nomad、Docker Compose 并给出选型建议。
Docker Swarm 介绍与选型指南
本文为 A1 认知篇(软件介绍与选型指南),全部信息来自官方公开资料溯源(官方文档、官方发行记录),不含本地安装与实测数据。文末附官方来源清单。本文主题即 Docker 自身的 Swarm 编排能力,docker、容器、镜像等均为正文技术名词。
一、信息基准
1.1 组件-版本基准表
Docker Swarm 无独立统一版本号,以官方组件口径给出基准(查询日期 2026-10-18):
| 组件 | 版本基准 | 依据 |
|---|---|---|
| Swarm mode(集群编排能力) | 随 Docker Engine 内置发行;基准 Engine 29.9.1(2026-10-14 发布,官方发行说明实查) | https://docs.docker.com/engine/release-notes/29/ |
| SwarmKit(编排实现库) | v2.1.2(官方仓库 moby/swarmkit 最新发行记录实查) | https://github.com/moby/swarmkit |
| Docker Classic Swarm(standalone 独立编排器) | 已停止积极开发(官方总览页原文:「no longer actively developed」) | https://docs.docker.com/engine/swarm/ |
| Docker Engine(Swarm 宿主引擎) | 29.9.1 | 官方静态包仓库 docker-29.9.1.tgz 实查 |
1.2 官方来源清单
| 来源 | 说明 | 链接 |
|---|---|---|
| Swarm mode 总览 | 特性清单与 Classic Swarm 区分声明 | https://docs.docker.com/engine/swarm/ |
| Swarm 关键概念 | swarmkit、节点/服务/任务/负载均衡 | https://docs.docker.com/engine/swarm/key-concepts/ |
| Swarm 教程 | 官方上手教程(swarm init、service 部署) | https://docs.docker.com/engine/swarm/swarm-tutorial/ |
| SwarmKit 仓库 | 编排层实现(v2.1.2) | https://github.com/moby/swarmkit |
| Engine 29 发行说明 | 宿主引擎版本基准 | https://docs.docker.com/engine/release-notes/29/ |
二、软件概述
Docker Swarm(现指 Swarm mode)是内置于 Docker Engine 的原生集群管理与编排能力,用于把一组 Docker 主机组成一个虚拟整体(官方称为 swarm),并用 Docker CLI 直接创建集群、部署服务与管理集群行为。官方总览明确:Swarm mode 由独立项目 SwarmKit 实现 Docker 的编排层,并被 Docker 直接内置使用——这意味着用户「不需要额外的编排软件」即可获得多主机容器编排;同时官方特别提醒不要把 Swarm mode 与已停止开发的 Docker Classic Swarm 混为一谈。
模型上,swarm 中的 Docker 主机以 manager(负责编排与集群管理,内部以 Raft 协议选出 leader)与 worker(接收并执行任务,默认不参与调度决策)两种角色参与;用户以声明式方式定义服务(service)的期望状态——副本数、网络与存储资源、对外端口等,Swarm 持续协调实际状态向期望状态收敛(如 worker 宕机后自动把任务调度到其他节点)。同一集群中仍可按需运行独立容器(standalone containers),也可用 stack 文件组合多个服务。
三、核心架构
3.1 Manager 与 Worker 角色
- Manager:执行编排与集群管理功能,维护集群状态,多个 manager 间以 Raft 共识保持一致并选举 leader(官方文档含 Raft 共识专述);manager 数量建议为奇数以保障容错仲裁。
- Worker:默认只接收并执行 manager 分派的任务(task,即 Swarm 服务中的一个运行容器);worker 不可用时其任务被重新调度。
- 一个 Docker 主机可同时兼任 manager 与 worker。
3.2 服务、任务与期望状态
- service:声明式的服务定义(镜像、副本数、端口、网络、卷、更新策略等);
- task:服务的一次具体运行实例(一个容器),由 manager 按期望状态分配;
- 协调循环:manager 持续比对实际状态与期望状态(如 10 副本中 2 副本所在 worker 宕机,则新建 2 个副本并分配到可用节点);
- 配置可变更无需手动重启:修改服务配置后,Swarm 停止旧配置任务并按新配置创建新任务。
3.3 网络与负载均衡
- overlay 网络:跨主机容器组网,manager 在应用初始化或更新时自动为容器分配地址;
- 服务发现:每个服务获得唯一 DNS 名称,swarm 内嵌 DNS 服务器解析;
- 路由网格(routing mesh):外部请求经暴露端口路由到任一节点的服务副本,内部可指定容器在节点间的分发方式。
3.4 安全模型
默认安全(secure by default):节点间通信强制 TLS 双向认证与加密,支持自签名根证书或自定义根 CA;官方还提供 secrets/configs 机制以受保护方式向服务下发敏感数据与配置,并可启用自动锁定(autolock)保护加密密钥。
四、功能特性
4.1 与 Engine 一体化的集群管理
swarm 的创建、加入(swarm init/join)与服务管理全部使用 Docker CLI 完成,无需安装额外编排软件;manager/worker 特化在运行时完成,可用同一份系统盘镜像搭建整群(官方:decentralized design)。
4.2 声明式服务模型与弹性扩缩
以期望状态声明服务;docker service scale 按需增减任务副本,manager 自动适配;节点故障时自动重调度,维持期望副本数。
4.3 滚动更新与回滚
按批次增量更新节点上的服务,可控制批次间延迟;更新异常可回滚到前一版本服务。
4.4 多主机网络、发现与流量分发
overlay 跨主机网络 + 内嵌 DNS 服务发现 + 路由网格负载均衡,对外可再挂接外部负载均衡器。
4.5 安全与密钥管理
默认 TLS 双向认证、PKI 证书轮换、secrets/configs 敏感数据管理、autolock 集群锁定(官方文档均有专述)。
五、快速上手
以下引自官方 Swarm mode 教程(未做本地实测)。在 manager 节点初始化 swarm:
docker swarm init --advertise-addr <MANAGER-IP>
worker 节点用官方输出的 join 命令加入集群:
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
部署一个 3 副本服务并查看(官方教程示例):
docker service create --replicas 3 --name helloworld alpine ping docker.com
docker service ls
docker service inspect --pretty helloworld
docker service scale helloworld=5
官方教程:https://docs.docker.com/engine/swarm/swarm-tutorial/ 。
六、适用场景与限制
6.1 适用场景
- 已全面使用 Docker、希望零额外组件获得多主机编排的中小规模集群。
- 以服务副本与滚动更新为核心的常规无状态/轻状态应用部署。
- 与 Docker Compose 语义衔接的过渡路径:单机用 Compose,跨主机直接 swarm stack。
- 边缘与资源受限环境:编排层内置于引擎,控制面组件少、占用低。
6.2 限制与注意事项
- 生态与调度能力边界:相比 Kubernetes 缺少庞大的 Operators/策略/多租户生态,复杂调度与治理需求应直接评估 Kubernetes(官方文档亦提示:面向 Kubernetes 部署开发时可考虑 Docker Desktop 集成的 Kubernetes)。
- 官方定位提示:官方明确「打算以 Swarm 作为生产运行环境才用 Swarm mode;不打算用 Swarm 部署则用 Docker Compose」,即单机场景无需引入 swarm。
- 存量混淆风险:Classic Swarm 已停止开发,技术资料中「Docker Swarm」一词可能指旧版,落地时以 Swarm mode 为准。
- 社区投入分散:2023 年后 Docker 官方重心在 Desktop/Scout/BuildKit 等产品线,Swarm mode 功能演进以维护为主(以官方发行说明为准)。
七、同类选型对比
7.1 对比对象与版本基准
同为「容器集群编排」定位的三个对比对象:Kubernetes(编排事实标准)、Nomad(HashiCorp 轻量编排器)、Docker Compose(单机声明编排,作为「是否需要集群」的对照)。版本基准(2026-10-18 查询):Docker Swarm 随 Engine 29.9.1 内置(SwarmKit v2.1.2);Kubernetes 最新发行记录为 v1.38.0-alpha.2(2026-10-07,官方仓库 releases feed;稳定线按季度大版本+月度补丁演进);Nomad v2.0.7(2026-09-18);Docker Compose 独立项目随 Docker 官方发布。
7.2 量化对比
| 维度 | Docker Swarm(内置) | Kubernetes | Nomad | Docker Compose |
|---|---|---|---|---|
| 开源许可 | Apache-2.0(随 Engine/SwarmKit) | Apache-2.0(官方 LICENSE 实查) | BUSL-1.1(官方 LICENSE 实查,到期转 MPL-2.0) | Apache-2.0 |
| 最近发版 / stars(2026-10-18) | 随 Engine 29.9.1(2026-10-14);SwarmKit v2.1.2;moby/moby 72,201 | v1.38.0-alpha.2(2026-10-07);128,346(kubernetes/kubernetes) | v2.0.7(2026-09-18);17,015(hashicorp/nomad) | 随 Docker 官方高频发布(compose/compose) |
| 版本节奏 | 随 Engine,维护为主 | 季度大版本+高频补丁,发布体系最重 | 常规版本迭代,2.x 已发布 | 高频小版本 |
| 兼容矩阵 | 依赖 Docker Engine 的 Linux 主机群 | CRI 运行时中立(containerd/CRI-O 等),云厂商托管普遍 | 支持 Docker/Podman 等多种驱动,可编排非容器工作负载 | 依赖 Docker Engine(单机或单主机 Compose) |
| 编排能力 | 服务/副本/overlay 网络/DNS 发现/路由网格/滚动更新,内置即用 | 全功能:调度策略、存储/网络插件生态、Operator、多租户治理 | 二进制级轻量控制面,作业与服务编排,多数据中心 | 单机多容器应用声明与生命周期,不做跨主机调度 |
(数据来源:各项目官方仓库 LICENSE 与 releases feed、官方发行说明,均为 2026-10-18 查询。)
7.3 选型建议
一句话建议:已有 Docker 基础且集群规模中小、追求零额外组件选 Docker Swarm;需要完整编排生态、多云托管与大规模治理选 Kubernetes;想要轻量控制面并兼顾非容器负载选 Nomad(注意 BUSL-1.1 许可);只在一台主机上编排少量服务,用 Docker Compose 即可,无需引入 swarm。
八、参考链接
- Swarm mode 官方总览:https://docs.docker.com/engine/swarm/
- Swarm 关键概念:https://docs.docker.com/engine/swarm/key-concepts/
- Swarm 官方教程:https://docs.docker.com/engine/swarm/swarm-tutorial/
- Raft 共识文档:https://docs.docker.com/engine/swarm/raft/
- SwarmKit 仓库:https://github.com/moby/swarmkit
- Docker Engine 29 发行说明:https://docs.docker.com/engine/release-notes/29/
- Moby 上游仓库:https://github.com/moby/moby
- Kubernetes 官方仓库:https://github.com/kubernetes/kubernetes
- Nomad 官方仓库:https://github.com/hashicorp/nomad
- Docker Compose 官方文档:https://docs.docker.com/compose/