docker Swarm 从小白到精通
一、Swarm 核心概念解析
1. Swarm 是什么?
Docker Swarm 是 Docker 官方的容器编排工具,用于将多个 Docker 主机组成集群,实现:
-
自动化容器部署
-
动态扩缩容
-
服务高可用
-
滚动更新
-
负载均衡
2. 核心架构组件

| 组件 | 说明 | 生产建议 |
|---|---|---|
| Manager节点 | 集群大脑,负责调度和决策 | 至少3个(奇数) |
| Worker节点 | 执行容器运行任务 | 按需扩展 |
| 服务(Service) | 部署单元,定义容器模板 | - |
| 任务(Task) | 服务的最小执行单元 | - |
| Raft共识 | 保证Manager节点状态一致 | - |
二、环境搭建实战
1. 单机快速体验
# 初始化单节点Swarm
docker swarm init
# 部署测试服务
docker service create --name web --publish 8080:80 --replicas 3 nginx:alpine
2. 生产级集群搭建
# Manager节点初始化(指定IP)
docker swarm init --advertise-addr 192.168.1.100
# 获取加入令牌
MANAGER_TOKEN=$(docker swarm join-token -q manager)
WORKER_TOKEN=$(docker swarm join-token -q worker)
# Worker节点加入
docker swarm join --token $WORKER_TOKEN 192.168.1.100:2377
3. 节点管理命令
# 查看节点状态
docker node ls
# 提升Worker为Manager
docker node promote worker-node1
# 排空节点(停止新任务分配)
docker node update --availability drain node-2
三、服务部署与管理
1. 基础服务操作
# 创建服务
docker service create \
--name redis \
--replicas 3 \
--publish published=6379,target=6379 \
--limit-cpu 1 \
redis:6-alpine
# 查看服务列表
docker service ls
# 扩缩容服务
docker service scale redis=5
# 删除服务
docker service rm redis
2. 服务更新策略
docker service update \
--image redis:7-alpine \
--update-parallelism 2 \
--update-delay 10s \
--update-failure-action rollback \
--rollback-parallelism 1 \
--rollback-delay 5s \
redis
3. 全局服务模式
# 每个节点运行一个监控代理
docker service create \
--mode global \
--name node-exporter \
--mount type=bind,source=/proc,target=/host/proc \
prom/node-exporter
四、网络架构深入
1. 网络类型对比
| 网络类型 | 作用 | 特点 |
|---|---|---|
| ingress | 外部访问入口 | 自动创建,路由网格 |
| overlay | 跨主机容器通信 | 加密通信,需手动创建 |
| bridge | 单主机容器通信 | 默认网络 |
| host | 直接使用宿主机网络 | 高性能,无隔离 |
2. 创建自定义Overlay网络
docker network create -d overlay \
--subnet 10.1.0.0/24 \
--gateway 10.1.0.1 \
--opt encrypted \
my-overlay
3. 服务使用自定义网络
docker service create \
--name api \
--network my-overlay \
--network ingress \
--publish 8080:80 \
my-api:latest
五、存储管理方案
1. 数据卷类型
2. 生产环境最佳实践
# 创建命名卷
docker volume create app-data
# 服务使用卷
docker service create \
--name db \
--mount source=app-data,target=/var/lib/mysql \
--replicas 3 \
mysql:8.0
六、安全与配置管理
1. 密钥管理
# 创建密钥
echo "db_password" | docker secret create db_pass -
# 服务使用密钥
docker service create \
--name db \
--secret db_pass \
-e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_pass \
mysql:8.0
2. 配置管理
# 创建配置
docker config create nginx.conf ./nginx.conf
# 服务使用配置
docker service create \
--name web \
--config source=nginx.conf,target=/etc/nginx/nginx.conf \
nginx:alpine
七、监控与日志
1. 内置监控方案
# 部署全局监控
docker service create --mode global \
--name cadvisor \
--mount type=bind,source=/,target=/rootfs,readonly=true \
--mount type=bind,source=/var/run,target=/var/run \
google/cadvisor:latest
2. 日志收集架构
八、生产环境最佳实践
1. 高可用架构设计
2. 资源限制策略
docker service create \
--name api \
--reserve-cpu 0.5 \
--reserve-memory 256M \
--limit-cpu 2 \
--limit-memory 1G \
my-api:v1
3. 灾难恢复方案
# 备份Swarm状态
docker swarm init --force-new-cluster --advertise-addr 192.168.1.100
# 恢复节点
docker node update --availability active node-2
九、常见问题排错
1. 服务部署故障排查
# 查看服务详情
docker service inspect --pretty web
# 查看服务日志
docker service logs -f web
# 查看容器状态
docker service ps web
2. 网络问题排查
# 检查网络连通性
docker exec -it <container> ping <target>
# 检查DNS解析
docker exec -it <container> nslookup service_name
3. 节点状态异常
# 查看节点详情
docker node inspect <node_id> --pretty
# 检查节点资源
docker node ps <node_id>
十、进阶技巧
1. 金丝雀发布
# 创建v1版本
docker service create --name app --replicas 5 my-app:v1
# 逐步替换为v2
docker service update \
--image my-app:v2 \
--update-parallelism 1 \
--update-delay 30s \
app
2. 自动扩缩容
# 安装自动扩缩组件
docker plugin install --alias scaler docker/scale
# 设置扩缩规则
docker service scale \
--min 2 \
--max 10 \
--step 1 \
--scale-on-cpu 80 \
web
3. 与CI/CD集成
# .gitlab-ci.yml 示例
deploy:
stage: deploy
script:
- docker stack deploy -c docker-compose.prod.yml myapp
only:
- master
学习路线图
-
小白阶段:单节点Swarm体验
-
入门阶段:多节点集群搭建
-
进阶阶段:网络/存储/安全配置
-
专家阶段:生产环境高可用架构
-
大师阶段:百万级容器集群管理
提示:实际学习时可在单机使用Docker Desktop的Swarm模式练习,再扩展到多节点环境。
郭慕荣博客园




浙公网安备 33010602011771号