Docker Swarm内置集群无需额外调度工具,通过docker swarm init初始化Manager节点、docker swarm join添加Worker节点,用docker service create或docker stack deploy部署高可用服务,支持自动负载均衡、故障自愈与滚动更新。

使用 Docker 内置 Swarm 模式构建容器集群,不需要额外安装调度工具(如 Kubernetes 或 Mesos),只需几条命令即可初始化集群、加入节点、部署服务。核心在于理解 Manager 节点 与 Worker 节点 的角色分工,以及通过 docker stack deploy 或 docker service create 声明式管理服务。
初始化 Swarm 集群并添加节点
在选定的首台机器上执行初始化命令,该机器自动成为 Manager:
-
docker swarm init --advertise-addr <本机IP>(必须指定可被其他节点访问的 IP) - 命令成功后会输出一条
docker swarm join --token ...命令,复制它 - 在其他主机上运行该 join 命令,节点即作为 Worker 加入集群;若希望其也具备管理能力,加
--role manager - 用
docker node ls查看所有节点状态,Ready且Active表示正常在线
部署高可用服务(Service)
Swarm 中的服务是跨节点自动调度和副本保持的核心单元:
- 运行
docker service create --replicas 3 -p 80:80 nginx:alpine,Swarm 会在可用 Worker 上启动 3 个 nginx 容器 - 任意节点的 80 端口都可访问服务——Swarm 内置路由网格(Ingress Network)自动负载均衡
- 用
docker service ps <service_name>查看每个任务(task)运行在哪台节点、当前状态 - 节点宕机时,Swarm 自动在其他健康节点补足副本数,无需人工干预
使用 Stack 文件编排多服务应用
比单条命令更可靠的方式是用 docker-compose.yml(v3+ 格式)定义整套服务:
- 编写
docker-compose.yml,包含 web、db、cache 等多个 service,并设置deploy字段(如 replicas、restart_policy、placement) - 执行
docker stack deploy -c docker-compose.yml myapp,Swarm 解析文件并创建网络、卷、服务 - Stack 名称(如
myapp)会作为服务前缀,例如myapp_web - 修改配置后重新 deploy,Swarm 按滚动更新策略替换旧任务,支持
update_config控制暂停间隔、失败回退等
关键运维与调试技巧
日常维护中需关注网络、存储、安全等实际约束:
- 默认使用 overlay 网络实现跨主机通信;自定义网络时加
--driver overlay --attachable才允许普通容器接入 - 敏感信息(密码、密钥)用
docker secret create管理,服务启动时通过--secret挂载为文件,不暴露在镜像或环境变量中 - 配置挂载宿主机目录需谨慎:Worker 节点路径必须一致,否则任务可能因挂载失败而反复重启;推荐优先使用命名卷(
docker volume create) - 日志统一查看:用
docker service logs -f myapp_web流式聚合所有副本日志;也可对接 ELK 或 Fluentd

















