Docker Swarm 简介及实战应用 目录一、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.核心定位对标KubernetesK8s、Docker Compose单机多容器Compose单机编排多个容器Swarm多机集群编排兼容 Compose 配置文件docker-compose.yml可直接用于 swarmK8s功能更庞大复杂适合大型生产集群Swarm 轻量、上手极简、运维成本低适合中小型项目、边缘集群、小规模服务集群。3.集群两大角色1Manager 管理节点集群管控核心维护集群状态、执行调度命令、保存集群配置支持多主高可用推荐奇数个3/5 个 Manager防止脑裂职责接收docker swarm命令、下发任务、监控节点状态、故障转移。2Worker 工作节点只负责执行 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节点发现4789Overlay 网络数据包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 workerdocker swarm join-token manager2. 其他节点加入集群对应复制上面命令在其他机器执行即可。 # 查看集群所有节点 docker node ls 提升woker节点为manager备用节点 docker node promote worker1-hostname worker2-hostname3. 集群常用查看命令# 查看集群所有节点 docker node ls # 查看集群整体信息 docker info | grep Swarm # 退出集群worker 节点节点离开swarm docker swarm leave # Manager节点强制退出 docker swarm leave --force4.三、核心常用操作Service 服务管理1. 创建基础服务# 创建nginx服务3个副本映射80端口 docker service create \ --name nginx-web \ --replicas 3 \ -p 80:80 \ nginx2. 查看服务与容器副本# 列出所有服务 docker service ls # 查看服务详细信息、运行节点 docker service ps nginx-web3. 横向扩缩容# 扩容到5个副本 docker service scale nginx-web5 # 缩容到2个副本 docker service scale nginx-web24. 滚动更新镜像灰度升级# 更新nginx镜像版本分批更新每批更新2个实例 docker service update \ --image nginx:1.25 \ --update-parallelism 2 \ nginx-web5. 删除服务docker service rm nginx-web四、结合 docker-compose.yml 批量部署最常用生产方式Swarm 支持docker stack命令直接基于 Compose 文件批量部署一组服务web、数据库、缓存等是主流使用方式。示例docker-compose.ymlversion: 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 可直接 pingredis域名解析到 redis 服务。4. Secrets 敏感信息管理适合存放密码、密钥明文不写入配置文件集群加密分发容器内仅内存挂载不会落盘# 创建密码secret echo root123 | docker secret create mysql_root_pwd -在 compose 中引用挂载给 MySQL 服务使用。六、适用选型建议✅ 选 Swarm节点数 20、中小业务、边缘场景、不想重度运维集群、团队熟悉 Docker 但不想学习 K8s✅ 选 K8s大型业务、大规模集群、复杂微服务、需要丰富生态监控、网关、自动伸缩、日志、istio 服务网格等。