Docker内置Swarm模式可直接实现高可用集群:先用docker swarm init初始化含3个Manager节点的集群(Raft容错1节点),再通过HEALTHCHECK声明健康检查并用docker service create部署多副本服务,Swarm自动完成故障重建、滚动更新与内置负载均衡。

直接用 Docker 内置的 Swarm 模式就能实现,不需要额外装组件,关键在节点组织、服务定义和健康检查三步联动。
初始化集群并规划节点角色
Swarm 采用 Manager-Worker 分层结构,Manager 负责调度与状态维护,Worker 执行容器任务。高可用建议至少部署 3 个 Manager 节点(Raft 协议可容忍 1 节点故障):
- 在首台机器执行:docker swarm init --advertise-addr ,命令会输出带 token 的 join 命令
- 其余节点运行该 join 命令加入集群,Manager 节点加 --role manager 参数,Worker 节点默认即此角色
- 用 docker node ls 确认所有节点状态为 Ready,Manager 节点标记为 Leader 或 Reachable
定义带健康检查的服务并部署
健康自愈的前提是容器能主动上报状态,必须在镜像层或部署层声明健康检查逻辑:
- 推荐在 Dockerfile 中添加:HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD curl -f http://localhost/health || exit 1
- 部署时用 docker service create 并指定副本数与端口映射:docker service create --name web --replicas 3 -p 80:80 nginx:alpine
- 若需约束部署位置(如只跑在 Worker 节点),加参数:--constraint node.role==worker
验证自愈能力与滚动更新机制
Swarm 会在检测到任务失败或节点离线时自动重建容器,无需人工干预:
- 手动模拟故障:在某 Worker 节点上执行 docker kill 杀掉一个服务容器,几秒内 docker service ps web 显示新任务已启动
- 模拟节点宕机:关闭一台 Worker 的 Docker 服务,Manager 会在约 30 秒内将该节点标记为 Down,并把其上的任务重新调度到其他健康节点
- 更新服务时用 docker service update --image nginx:1.25 web,Swarm 默认按滚动方式替换容器,失败则自动回退上一版本
内置负载均衡与服务发现
Swarm 自带 Ingress 网络,所有服务通过集群内部 DNS 名称互通,外部流量经 VIP 自动分发:
- 同一集群内,容器可直接用服务名访问,例如 curl http://web(无需 IP 或端口)
- 发布端口(如 -p 80:80)后,任意 Manager 或 Worker 的 IP:80 都可访问服务,流量由内置负载均衡器分发到各副本
- 不依赖外部反向代理,也不需要配置 Consul 或 etcd 等第三方服务发现组件











