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

学习路线图

  1. 小白阶段:单节点Swarm体验

  2. 入门阶段:多节点集群搭建

  3. 进阶阶段:网络/存储/安全配置

  4. 专家阶段:生产环境高可用架构

  5. 大师阶段:百万级容器集群管理

提示:实际学习时可在单机使用Docker Desktop的Swarm模式练习,再扩展到多节点环境。

 

posted @ 2025-06-30 11:25  郭慕荣  阅读(296)  评论(0)    收藏  举报