Docker Swarm 是 Docker 原生的容器编排工具,可以把多台 Docker 主机组成一个集群(Swarm 集群),实现服务部署、负载均衡、高可用和滚动更新。
下面我会从基础到实战,带你全面理解 Docker Swarm。
一、什么是 Docker Swarm?
Swarm 是 Docker 官方提供的容器编排系统,用于统一管理多台 Docker 主机,实现分布式服务部署与自动调度。
它的作用类似于 Kubernetes,但更轻量、易上手。
二、Swarm 的核心概念
概念 | 说明 |
---|---|
节点 Node | 组成 Swarm 的 Docker 主机,有两类:Manager / Worker |
Manager 节点 | 负责集群管理、服务调度和选举 |
Worker 节点 | 执行容器任务(服务实例) |
服务 Service | 类似 docker run 的升级版,可在多个节点运行 |
任务 Task | 服务的具体运行单元(即容器) |
栈 Stack | 一组服务的集合(类似 docker-compose 项目) |
三、搭建 Swarm 集群(实操)
假设你有三台服务器:
node1
:Manager 节点node2
:Worker 节点node3
:Worker 节点
在 Manager 节点初始化 Swarm:
docker swarm init --advertise-addr <node1-IP>
输出示例:
docker swarm join --token SWMTKN-1-xxxxxxxxx <node1-IP>:2377
在其他 Worker 节点加入集群:
docker swarm join --token SWMTKN-1-xxxxxxx <node1-IP>:2377
查看节点列表(在 Manager 上执行):
docker node ls
四、Swarm 服务部署
创建服务(如 nginx):
docker service create \
--name web \
--replicas 3 \
--publish 80:80 \
nginx
说明:
--replicas 3
:启动 3 个 nginx 容器- 自动分布到多个节点,具备负载均衡
查看服务状态:
docker service ls
docker service ps web
扩缩容服务:
docker service scale web=5
删除服务:
docker service rm web
五、使用 Stack 管理多个服务(类似 docker-compose)
- 写一个
docker-compose.yml
文件:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
redis:
image: redis
- 部署为 Stack:
docker stack deploy -c docker-compose.yml mystack
- 查看:
docker stack ls
docker stack services mystack
docker stack ps mystack
- 删除:
docker stack rm mystack
六、Swarm 的内置优势
特性 | 描述 |
---|---|
自动负载均衡 | 服务自动分配到不同节点 |
服务发现与 DNS | 容器通过服务名自动解析 |
服务自愈 | 节点挂掉后自动重新调度容器 |
滚动更新 | 可无停机部署更新 |
高可用 | 支持多 Manager 热备(Raft 协议) |
原生 Docker 支持 | 无需额外组件,安装简单 |
七、Swarm vs Kubernetes
特性 | Docker Swarm | Kubernetes |
---|---|---|
安装与配置 | 简单,一行命令即可 | 较复杂,需安装多个组件 |
学习曲线 | 平缓,Docker 原生语法 | 陡峭,需学习 K8s 资源模型 |
生态兼容性 | 限于 Docker 环境 | 更通用,云原生生态支持广 |
高可用部署 | 支持 | 更强大(自带调度、伸缩策略等) |
社区活跃度 | 较少维护(已被 K8s 取代) | 活跃,是 CNCF 支持的主流平台 |
总结一句话
Docker Swarm 是轻量级、原生支持的容器编排方案,适合中小型项目、开发环境快速部署;如需更复杂调度策略或云原生集成,推荐用 Kubernetes。