如果说docker-compose是管理一个小队,那Swarm就是指挥整个魔法王国军团!🏰✨
🧙♂️ 第一章:什么是Docker Swarm?
想象一下:你不仅是魔法小队的队长,而是成为了魔法王国的大元帅!
Docker Swarm就是:
-
🐋 多个Docker主机组成的魔法集群
-
👑 内置的原生集群管理功能
-
🌐 让多个机器像一台机器一样工作
简单说:把很多台电脑变成一台超级电脑的魔法!
📊 第二章:Swarm vs Compose 异同
特性 | Docker Compose | Docker Swarm |
---|---|---|
规模 | 单机小队 | 多机军团 |
用途 | 开发测试 | 生产部署 |
高可用 | ❌ 无 | ✅ 有 |
负载均衡 | ❌ 无 | ✅ 自动 |
魔法级别 | 见习魔法师 | 大魔导师 |
Compose:”我在一台机器上启动所有服务”
Swarm:”我在一个集群上部署服务,自动分配到哪里运行”
⚙️ 第三章:Swarm工作原理
集群角色:
-
Manager节点:🐼 熊猫元帅(指挥中心)
– Manager节点:管理节点。负责集群的管理和控制,Swarm集群允许多个Manager节点,多个Manager节点中仅允许唯一一个Leader。 -
Worker节点:🐯 老虎士兵(干活节点)
– Worker节点:工作节点。负责接收来自Manager节点的任务分配,并执行相应的容器操作
工作流程:
-
你告诉Manager:”我要10个web服务实例”
-
Manager调度到各个Worker节点上运行
-
内置负载均衡自动分配流量
-
如果某个节点宕机,自动在其他节点重启服务
bash
# 初始化Swarm(成为Manager)
docker swarm init --advertise-addr <经理IP>
# 工人节点加入
docker swarm join --token <魔法令牌> <经理IP>:2377
🎯 第四章:Swarm集群管理
创建集群:
查看集群状态:
docker node ls # 查看所有节点
# 输出示例:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
panda1 * manager1 Ready Active Leader
tiger1 worker1 Ready Active
tiger2 worker2 Ready Active
🐯 第五章:节点管理
提升节点身份:
# 把worker提升为manager(增加管理节点)
docker node promote tiger1
# 降级为worker
docker node demote tiger1
节点维护:
# 排空节点(不再分配新任务)
docker node update --availability drain tiger1 # 节点暂停接受任务
# 重新激活节点
docker node update --availability active tiger1
🚀 第六章:服务管理
创建服务:
# 部署web服务(10个副本)
docker service create --name 网页魔法屋 \
--replicas 10 \
--publish published=80,target=3000 \
my-web-app:latest
# 查看服务
docker service ls
docker service ps 网页魔法屋
服务扩缩容:
# 扩容到15个实例
docker service scale 网页魔法屋=15
# 或者用update命令
docker service update --replicas 20 网页魔法屋
📈 第七章:弹性伸缩
手动伸缩:
# 根据CPU使用率自动伸缩(需要资源限制)
docker service update \
--limit-cpu 0.5 \
--replicas-max 10 \
--replicas-min 2 \
网页魔法屋
监控伸缩:
# 结合监控工具自动伸缩 # 当CPU > 70%时自动增加实例 # 当CPU < 30%时自动减少实例
🔄 第八章:滚动更新
零停机更新:
# 更新服务镜像(滚动更新)
docker service update \
--image my-web-app:v2.0 \
--update-parallelism 2 \ # 每次更新2个实例
--update-delay 10s \ # 每次间隔10秒
--update-failure-action pause \ # 失败时暂停
网页魔法屋
回滚更新:
# 如果新版本有问题,快速回滚 docker service update --rollback 网页魔法屋
🎩 第九章:Swarm中使用Docker Compose
使用stack部署(推荐):
# docker-compose.yml
version: '3.8'
services:
网页魔法屋:
image: my-web-app:latest
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
resources:
limits:
cpus: '0.5'
memory: 512M
ports:
- target: 3000
published: 80
protocol: tcp
mode: ingress
部署stack:
# 部署整个应用栈
docker stack deploy -c docker-compose.yml 魔法王国
# 查看stack
docker stack ls
docker stack services 魔法王国
🌟 终极魔法演示:
# 1. 初始化Swarm
docker swarm init
# 2. 部署整个魔法军团
docker stack deploy -c docker-compose.yml 魔法军团
# 3. 查看部署状态
docker service ls
# 4. 扩容web服务
docker service scale 魔法军团_网页魔法屋=10
# 5. 滚动更新到新版本
docker service update --image my-web-app:v2.0 魔法军团_网页魔法屋
💡 Swarm魔法心得:
-
简单强大:内置集群功能,无需额外工具
-
高可用:Manager节点可多个,自动选举Leader
-
服务发现:自动DNS解析,服务间直接用服务名访问
-
安全:TLS加密通信,安全令牌管理
(魔法杖挥出绚烂光芒)现在你已经是Swarm大元帅了!可以去管理真正的生产环境集群了!
记住:Swarm让分布式系统变得像操作单机一样简单! 去构建你的魔法帝国吧!🐋✨