引言

Docker Swarm是Docker原生的集群管理工具。本文介绍Swarm的使用和实战。

一、集群初始化

1
2
3
4
5
6
7
8
9
10
11
# 初始化Swarm(管理节点)
docker swarm init --advertise-addr 192.168.1.10

# 加入工作节点
docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377

# 加入管理节点
docker swarm join-token manager

# 查看节点
docker node ls

二、服务部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建服务
docker service create \
--name web \
--replicas 3 \
--publish 80:80 \
nginx:latest

# 查看服务
docker service ls
docker service ps web

# 扩缩容
docker service scale web=5

# 更新服务
docker service update --image nginx:1.21 web

# 删除服务
docker service rm web

三、Stack部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# docker-compose.yml
version: '3.8'

services:
web:
image: nginx:latest
ports:
- "80:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == worker
update_config:
parallelism: 1
delay: 10s
networks:
- webnet

redis:
image: redis:latest
deploy:
replicas: 1
placement:
constraints:
- node.role == manager
networks:
- webnet

networks:
webnet:
driver: overlay
1
2
3
4
5
6
7
8
9
# 部署Stack
docker stack deploy -c docker-compose.yml myapp

# 查看Stack
docker stack ls
docker stack services myapp

# 删除Stack
docker stack rm myapp

四、滚动更新

1
2
3
4
5
6
7
8
9
# 滚动更新策略
docker service update \
--update-parallelism 2 \
--update-delay 10s \
--image nginx:1.21 \
web

# 回滚
docker service rollback web

总结

Docker Swarm核心:

  1. 集群管理:Manager和Worker节点
  2. 服务编排:Service和Task
  3. 负载均衡:内置负载均衡
  4. 滚动更新:零停机部署

参考资料