一、认识 Docker Swarm

Docker Swarm 是 Docker 官方提供的 容器集群管理工具,它允许用户将多个 Docker 主机组合成一个单一的虚拟 Docker 主机,从而实现容器的 高可用性、负载均衡与自动扩展

一句话总结:Docker Swarm 是“轻量级的容器编排工具”,让你在多个节点上无缝管理容器。

核心功能:

  • 集群模式:多个 Docker 主机组成一个集群,集群内的所有主机均为 Docker 节点。

  • 负载均衡:自动分配请求到集群中的容器实例。

  • 服务发现:Swarm 自动识别集群内的服务并提供 DNS 服务。

  • 高可用性:故障恢复和自动重建容器。


二、Docker Swarm 架构概览


┌──────────────────────┐ │ Swarm Manager │ ← 负责集群管理、任务调度 └──────────────────────┘ │ ▼ ┌──────────────────────┐ │ Swarm Worker │ ← 运行容器服务 └──────────────────────┘ │ ▼ ┌──────────────────────┐ │ Docker Containers │ ← 实际运行的应用容器 └──────────────────────┘

组件说明:

  • Swarm Manager:负责管理 Swarm 集群,处理任务调度、服务部署、集群状态监控等。

  • Swarm Worker:处理来自 Manager 的任务请求并运行容器。

  • Docker Container:在工作节点上实际运行的容器,应用服务容器化部署。


三、启动 Docker Swarm

1. 初始化 Swarm 集群

在主节点(Manager)上执行:


docker swarm init --advertise-addr <MANAGER-IP>

输出:


Swarm initialized: current node (abc123) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token <TOKEN> <MANAGER-IP>:2377

2. 加入 Worker 节点

在 Worker 节点上执行:


docker swarm join --token <TOKEN> <MANAGER-IP>:2377

查看集群状态:


docker node ls


四、Swarm 服务管理

1. 创建服务

通过 Swarm 部署服务,Docker 会自动将服务分发到集群中的多个节点。

例如,创建一个 Nginx 服务:


docker service create --name web-server -p 80:80 nginx

查看服务:


docker service ls

查看服务详细信息:


docker service ps web-server

2. 更新服务

更新服务的镜像版本:


docker service update --image nginx:latest web-server


五、Swarm 负载均衡

Docker Swarm 内置负载均衡,所有服务请求都会自动分配到集群内可用的容器实例。

创建一个 Nginx 服务,使用两个副本:


docker service create --name web-server -p 80:80 --replicas 2 nginx

Swarm 会自动在集群中选择不同的节点来运行两个副本,并且当某个副本宕机时,Swarm 会自动重启该副本。


六、Swarm 网络管理

Swarm 支持 Overlay Networks,使得不同主机上的容器能够通过虚拟网络互相通信。

1. 创建自定义网络

docker network create --driver overlay my-network

2. 在服务中使用自定义网络

docker service create --name web-server --network my-network nginx

3. 查看网络

docker network ls


七、Swarm 秘密与配置管理

Swarm 提供了对 敏感数据(如密码、API 密钥)配置信息 的管理能力。

1. 创建配置

echo "db_host=database.local" | docker config create db_config -

2. 创建秘密

echo "my_secret_password" | docker secret create db_password -

3. 使用配置与秘密

docker service create --name app --secret db_password --config db_config myapp


八、Swarm 服务扩展与缩容

1. 扩容服务副本数

docker service scale web-server=5

2. 缩容服务副本数

docker service scale web-server=2

查看服务副本数:


docker service ps web-server


九、Swarm 集群管理与故障恢复

1. 查看节点状态

docker node ls

2. 从集群中移除节点

docker node rm <NODE-ID>

3. 在节点失败时自动恢复容器

Swarm 会自动重启被调度到失败节点上的容器,保持服务高可用。

4. 标记节点为不可调度

docker node update --availability drain <NODE-ID>

参考案例:www.jfnhdm.com
 


十、Swarm 与 Docker Compose 集成

Docker Compose 可以和 Swarm 集成,管理多服务应用的编排。

1. 创建 docker-compose.yml 文件

version: "3" services: web: image: nginx deploy: replicas: 3 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure db: image: mysql deploy: replicas: 1

2. 启动 Compose 服务

docker stack deploy -c docker-compose.yml myapp

3. 查看服务状态

docker stack services myapp


十一、Swarm 更新与版本管理

1. 更新 Docker 引擎版本

sudo apt-get update sudo apt-get upgrade docker-ce

2. 检查 Swarm 状态

docker info

3. 退出 Swarm 集群

docker swarm leave --force


十二、Swarm 安全与访问控制

Docker Swarm 提供 RBAC(角色与权限控制)TLS 加密通信

1. 启用加密通信

Docker 默认启用 TLS 加密,确保节点间的通信安全。

2. 创建用户与角色

docker service create --name secure-web --secret my_secret nginx


十三、Swarm 高可用与跨节点调度

1. 部署 Swarm 管理节点高可用

使用 HAProxy + Keepalived 配置多个 Swarm Manager 节点,提供 高可用性

2. Swarm Manager 节点故障自动恢复

若当前 Manager 节点发生故障,Swarm 会自动选择下一个候选 Manager 节点来接管管理职责。


十四、Docker Swarm 与 CI/CD 集成

1. Jenkins 与 Docker Swarm 集成

使用 Jenkins 管道自动化构建与部署到 Docker Swarm 集群。


stage('Deploy to Swarm') { steps { sh 'docker stack deploy -c docker-compose.yml myapp' } }


十五、Docker Swarm 性能优化与监控

1. 监控集群状态

使用 Docker CLI 查看服务、节点、任务等信息:


docker service ls docker node ls

2. 性能调优建议
  • CPU与内存限制:为服务配置合理的资源限制。

  • 容器健康检查:设置容器健康检查,确保容器始终处于健康状态。

  • 日志管理:将容器日志导出到外部存储或日志管理平台。


十六、Swarm 与 Kubernetes 比较

特性 Docker Swarm Kubernetes
学习曲线 简单 较复杂
容器编排 支持 支持
生态系统 较小 庞大
扩展性 较弱 强大
集群管理 内置 内置,支持多种插件
服务发现 内置 内置
高可用性 支持 支持

十七、Docker Swarm 部署与生产应用

1. 持久化存储

使用 Docker Volumes 或第三方存储系统为容器提供持久化存储。

2. 部署数据库服务

使用 Docker Secrets 管理数据库密码,并确保数据库服务的高可用性。


十八、Swarm 常见故障排查

问题 解决方案
容器无法启动 检查日志、资源限制
节点无法加入集群 检查网络配置、token 是否过期
服务不可访问 检查负载均衡配置、网络策略

十九、Swarm 集群的备份与恢复

使用 Docker docker swarm backup 或通过备份关键数据(如 overlay networkvolumes)进行手动备份。


二十、完整实战项目:企业级 Docker Swarm 部署

目标:
搭建一个多节点的 Docker Swarm 集群,支持自动化部署与服务扩展。

架构:

Manager节点 1-3 → Swarm集群管理 Worker节点 1-5 → 容器服务执行 负载均衡 → 自动分配请求

部署步骤:
  1. 初始化 Swarm 集群,配置 Manager 与 Worker 节点。

  2. 使用 Docker Compose 创建多服务应用。

  3. 配置负载均衡与高可用服务。

  4. 配置容器健康检查与自动扩展。

最终效果:

  • 高可用集群管理

  • 动态扩展服务

  • 服务自动恢复与重调度

  • 持久化存储与敏感数据管理

更多推荐