目录

一、Docker Swarm 核心简介

1.简介

2.核心定位

3.集群两大角色

4.核心基础概念

5. Swarm 自带能力

二、Swarm 基础集群搭建(极简流程)

1. 初始化集群(在第一台 Manager 节点执行)

2. 其他节点加入集群

3. 集群常用查看命令

三、核心常用操作(Service 服务管理)

四、结合 docker-compose.yml 批量部署(最常用生产方式)

五、Swarm 关键特性详解

六、适用选型建议


一、Docker Swarm 核心简介

1.简介

        Docker Swarm 是 Docker 官方原生内置的容器集群编排工具,从 Docker 1.12 版本开始直接集成在 Docker Engine 中,无需额外安装组件,用于把多台 Docker 主机组成集群,统一调度、管理容器服务,实现容器分布式部署、扩缩容、故障自愈、负载均衡。

简单理解:

  • 单机 docker run:管单台机器上单个容器;
  • Docker Swarm:管一整个集群多台机器上的一批容器服务。

2.核心定位

  • 对标:Kubernetes(K8s)、Docker Compose(单机多容器)
  • Compose:单机编排多个容器;
  • Swarm:多机集群编排,兼容 Compose 配置文件(docker-compose.yml 可直接用于 swarm);
  • K8s:功能更庞大复杂,适合大型生产集群;Swarm 轻量、上手极简、运维成本低,适合中小型项目、边缘集群、小规模服务集群。

3.集群两大角色

(1)Manager 管理节点

  • 集群管控核心,维护集群状态、执行调度命令、保存集群配置;
  • 支持多主高可用(推荐奇数个:3/5 个 Manager,防止脑裂);
  • 职责:接收 docker swarm 命令、下发任务、监控节点状态、故障转移。

(2)Worker 工作节点

  • 只负责执行 Manager 下发的任务,实际创建、运行容器;
  • 不参与集群决策,只干活;
  • 一个 Swarm 集群至少 1 个 Manager + 任意多个 Worker

4.核心基础概念

  • Swarm 集群:所有加入集群的 Docker 主机整体
  • Node(节点):集群里每一台 Docker 服务器
  • Service(服务):Swarm 中最小部署单元,定义容器镜像、副本数、端口、网络、挂载、重启策略;一个 Service 可以启动 N 个副本容器
  • Task(任务):Service 下发到节点的最小执行单元,本质就是单个容器实例

  • Overlay 网络:Swarm 跨主机容器互通的驱动网络,不同机器上容器可直接通信
  • Routing Mesh(路由网格):内置负载均衡,集群任意节点暴露端口,所有节点均可访问该服务,自动转发请求到可用副本

5. Swarm 自带能力

✅ 原生负载均衡(Routing Mesh)
✅ 服务水平扩缩容
✅ 节点宕机自动重新调度容器(自愈)
✅ 滚动更新、灰度发布
✅ 密钥管理、配置文件管理(secrets/configs)
✅ 集群网络、数据卷统一管理
✅ 命令行与 Compose 文件双种部署方式

二、Swarm 基础集群搭建(极简流程)

环境准备

多台服务器,Docker 版本 ≥1.12,互通 2377、7946、4789 端口

  • 2377:集群管理通信
  • 7946:节点发现
  • 4789:Overlay 网络数据包

1. 初始化集群(在第一台 Manager 节点执行)

# 初始化swarm,指定本机IP作为集群广播地址
docker swarm init --advertise-addr 192.168.1.10

执行成功会输出两条加入命令:

# 加入Manager节点命令(多主扩容)
docker swarm join --token SWMTKN-xxx-manager 192.168.1.10:2377

# 加入Worker工作节点命令
docker swarm join --token SWMTKN-xxx-worker 192.168.1.10:2377

备注:

如果忘了节点加入到swarm中的token,则可以在manager节点中使用查询指令

docker swarm join-token worker

docker swarm join-token manager

2. 其他节点加入集群

对应复制上面命令在其他机器执行即可。

# 查看集群所有节点
docker node ls

提升woker节点为manager备用节点
docker node promote worker1-hostname worker2-hostname

3. 集群常用查看命令

# 查看集群所有节点
docker node ls

# 查看集群整体信息
docker info | grep Swarm

# 退出集群(worker 节点节点离开swarm)
docker swarm leave
# Manager节点强制退出
docker swarm leave --force

4.

三、核心常用操作(Service 服务管理)

1. 创建基础服务

# 创建nginx服务,3个副本,映射80端口
docker service create \
  --name nginx-web \
  --replicas 3 \
  -p 80:80 \
  nginx

2. 查看服务与容器副本

# 列出所有服务
docker service ls

# 查看服务详细信息、运行节点
docker service ps nginx-web

3. 横向扩缩容

# 扩容到5个副本
docker service scale nginx-web=5

# 缩容到2个副本
docker service scale nginx-web=2

4. 滚动更新镜像(灰度升级)

# 更新nginx镜像版本,分批更新,每批更新2个实例
docker service update \
  --image nginx:1.25 \
  --update-parallelism 2 \
  nginx-web

5. 删除服务

docker service rm nginx-web

四、结合 docker-compose.yml 批量部署(最常用生产方式)

Swarm 支持 docker stack 命令,直接基于 Compose 文件批量部署一组服务(web、数据库、缓存等),是主流使用方式。

示例 docker-compose.yml

version: '3.8'
services:
  nginx:
    image: nginx
    replicas: 3
    ports:
      - "80:80"
    networks:
      - swarm-net
    deploy:
      restart_policy:
        condition: on-failure
      placement:
        constraints: [node.role != manager] # 不部署在管理节点

  redis:
    image: redis:alpine
    replicas: 1
    networks:
      - swarm-net
    volumes:
      - redis-data:/data

networks:
  swarm-net:
    driver: overlay # swarm跨主机网络

volumes:
  redis-data:

部署 / 更新 / 移除栈服务

# 部署stack,名字demo
docker stack deploy -c docker-compose.yml demo

# 查看集群栈列表
docker stack ls

# 查看栈内所有服务
docker stack services demo

# 删除整个栈(所有服务、网络)
docker stack rm demo

五、Swarm 关键特性详解

1. Routing Mesh 路由网格

只要服务在集群任意节点映射端口,集群内任意一台机器 IP + 端口都能访问服务。 哪怕请求打到没有该容器副本的节点,Docker 会自动路由转发到有运行实例的节点,天然实现四层负载均衡。

2. 故障自愈

某台 Worker 节点宕机失联,Manager 检测后会自动在其他健康节点拉起对应数量的容器副本,保证 replicas 设定数量不变。

3. Overlay 跨主机网络

自定义 overlay 网络后,不同服务器上的容器可以直接用服务名互相通信,无需知道对方 IP,类似 K8s Service DNS。 如上例中 nginx 可直接 ping redis 域名解析到 redis 服务。

4. Secrets 敏感信息管理

适合存放密码、密钥,明文不写入配置文件,集群加密分发,容器内仅内存挂载,不会落盘:

# 创建密码secret
echo "root123" | docker secret create mysql_root_pwd -

在 compose 中引用挂载给 MySQL 服务使用。

六、适用选型建议

✅ 选 Swarm:节点数 <20、中小业务、边缘场景、不想重度运维集群、团队熟悉 Docker 但不想学习 K8s;
✅ 选 K8s:大型业务、大规模集群、复杂微服务、需要丰富生态(监控、网关、自动伸缩、日志、istio 服务网格等)。

更多推荐