Docker学习(10) Docker Swarm(下)
2019-11-06 本文已影响0人
August________
Docker学习(10) Docker Swarm(下)
Swarm 服务
- 使用服务能够配置容器的属性:容器名、端口属性、接入网络和镜像
- 额外的特性:声明应用服务的期望状态
例子
- 做一个web前端服务,该服务有应用的镜像,5个实例来对应。
root@mgr1:~# docker service create --name web-fe \
> -p 80:80 \
> --replicas 5 \
> nigelpoulton/pluralsight-docker-ci
fcoairzvnxq7aeolc3k8mrr82
-
docker service create 告知docker正在声明一个服务。
-
--name 命名服务名称
-
-p 将节点的端口映射到服务副本内部。
-
--replicas 告知docker应该有几个此服务的副本。
-
所有服务都会被swarm持续监控
查看服务
- 查看swarm中运行的所有服务
root@mgr1:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
fcoairzvnxq7 web-fe replicated 0/5 nigelpoulton/pluralsight-docker-ci:latest *:80->80/tcp
- 查看服务的副本列表及各服务的状态
root@mgr1:~# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
fl93u9gehqgz web-fe.1 nigelpoulton/pluralsight-docker-ci:latest mgr3 Running Preparing 10 minutes ago
k2n6z5dg8zv7 web-fe.2 nigelpoulton/pluralsight-docker-ci:latest wrk2 Running Running 34 seconds ago
m2pokv4qcmp6 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest mgr2 Running Running 2 minutes ago
a2j57rhgtdq0 web-fe.4 nigelpoulton/pluralsight-docker-ci:latest mgr1 Running Running 4 minutes ago
3uhnqqccgywa web-fe.5 nigelpoulton/pluralsight-docker-ci:latest wrk1 Running Running about a minute ago
- 查看服务的更详细信息
root@mgr1:~# docker service inspect --pretty web-fe
ID: fcoairzvnxq7aeolc3k8mrr82
Name: web-fe
Service Mode: Replicated
Replicas: 5
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: nigelpoulton/pluralsight-docker-ci:latest@sha256:7a6b0125fe7893e70dc63b2c42ad779e5866c6d2779ceb9b12a28e2c38bd8d3d
Init: false
Resources:
Endpoint Mode: vip
Ports:
PublishedPort = 80
Protocol = tcp
TargetPort = 80
PublishMode = ingress
- --pretty 限制输出仅包含最感兴趣的内容,以易于阅读的方式打开。
副本服务& 全局服务
- 服务默认的复制模式是副本模式:部署期望数量的服务副本,尽可能的将各个服务分布到整个集群当中
- 全局模式:每个节点仅运行一个服务。——:--mode global参数来实现全局模式
服务的扩缩容
- 增产10个服务副本
- 查看服务副本在各个节点的平均分布
root@mgr2:~# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
fl93u9gehqgz web-fe.1 nigelpoulton/pluralsight-docker-ci:latest mgr3 Running Preparing 22 minutes ago
k2n6z5dg8zv7 web-fe.2 nigelpoulton/pluralsight-docker-ci:latest wrk2 Running Running 12 minutes ago
m2pokv4qcmp6 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest mgr2 Running Running 14 minutes ago
a2j57rhgtdq0 web-fe.4 nigelpoulton/pluralsight-docker-ci:latest mgr1 Running Running 16 minutes ago
3uhnqqccgywa web-fe.5 nigelpoulton/pluralsight-docker-ci:latest wrk1 Running Running 13 minutes ago
d9qxyhwi5h5c web-fe.6 nigelpoulton/pluralsight-docker-ci:latest wrk3 Running Preparing 49 seconds ago
1ut5mrfw57cu web-fe.7 nigelpoulton/pluralsight-docker-ci:latest wrk3 Running Preparing 49 seconds ago
5onxk17wm44b web-fe.8 nigelpoulton/pluralsight-docker-ci:latest wrk2 Running Running 48 seconds ago
m8xd7zl4niur web-fe.9 nigelpoulton/pluralsight-docker-ci:latest mgr3 Running Preparing 49 seconds ago
l5isb4gm7m70 web-fe.10 nigelpoulton/pluralsight-docker-ci:latest mgr2 Running Running 48 seconds ago
- 再将服务副本从10降到5
root@mgr1:~# docker service scale web-fe=10
web-fe scaled to 10
overall progress: 6 out of 10 tasks
overall progress: 6 out of 10 tasks
overall progress: 8 out of 10 tasks
- 查看服务副本的分布
root@mgr1:~# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
k2n6z5dg8zv7 web-fe.2 nigelpoulton/pluralsight-docker-ci:latest wrk2 Running Running 15 minutes ago
m2pokv4qcmp6 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest mgr2 Running Running 18 minutes ago
a2j57rhgtdq0 web-fe.4 nigelpoulton/pluralsight-docker-ci:latest mgr1 Running Running 20 minutes ago
3uhnqqccgywa web-fe.5 nigelpoulton/pluralsight-docker-ci:latest wrk1 Running Running 16 minutes ago
d9qxyhwi5h5c web-fe.6 nigelpoulton/pluralsight-docker-ci:latest wrk3 Running Running about a minute ago
1ut5mrfw57cu web-fe.7 nigelpoulton/pluralsight-docker-ci:latest wrk3 Remove Shutdown less than a second ago
5onxk17wm44b web-fe.8 nigelpoulton/pluralsight-docker-ci:latest wrk2 Remove Shutdown less than a second ago
m8xd7zl4niur web-fe.9 nigelpoulton/pluralsight-docker-ci:latest mgr3 Remove Shutdown less than a second ago
l5isb4gm7m70 web-fe.10 nigelpoulton/pluralsight-docker-ci:latest mgr2 Remove Shutdown less than a second ago
root@mgr1:~# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
k2n6z5dg8zv7 web-fe.2 nigelpoulton/pluralsight-docker-ci:latest wrk2 Running Running 16 minutes ago
m2pokv4qcmp6 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest mgr2 Running Running 18 minutes ago
a2j57rhgtdq0 web-fe.4 nigelpoulton/pluralsight-docker-ci:latest mgr1 Running Running 20 minutes ago
3uhnqqccgywa web-fe.5 nigelpoulton/pluralsight-docker-ci:latest wrk1 Running Running 16 minutes ago
d9qxyhwi5h5c web-fe.6 nigelpoulton/pluralsight-docker-ci:latest wrk3 Running Running about a minute ago
删除服务
root@mgr1:~# docker service rm web-fe
web-fe
root@mgr1:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
滚动升级
- 对部署的应用进行滚动升级
- 先创建一个新的覆盖网络给服务使用
root@mgr1:~# docker network create -d overlay uber-net
4dej9prz4p2ysiaazsxxf4j2a
- 覆盖网络是创建子啊底层异构网络之上的一个新的二层容器网络
- 查看创建的网络
root@mgr1:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
982e20525c92 bridge bridge local
1369db4bb785 docker_gwbridge bridge local
2393ca24274a host host local
2dguzptxi4uo ingress overlay swarm
f5e31aa259c6 none null local
4dej9prz4p2y uber-net overlay swarm
- 创建一个服务,将其接入uber-net网络
root@mgr1:~# docker service create --name uber-svr \
> --network uber-net \
> -p 80:80 --replicas 12 \
> nigelpoulton/tu-demo:v1
lymtwway58lnow87btpz5at53
- 查看创建服务的状态
root@mgr2:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lymtwway58ln uber-svr replicated 0/12 nigelpoulton/tu-demo:v1 *:80->80/tcp
root@mgr2:~# docker service ps uber-svr
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
mc5ni9z3rbit uber-svr.1 nigelpoulton/tu-demo:v1 wrk2 Running Preparing about a minute ago
p6tqug5eafww uber-svr.2 nigelpoulton/tu-demo:v1 wrk2 Running Preparing about a minute ago
vu97ofssg4g4 uber-svr.3 nigelpoulton/tu-demo:v1 mgr1 Running Preparing about a minute ago
j1vpg5f5rqk2 uber-svr.4 nigelpoulton/tu-demo:v1 mgr2 Running Preparing about a minute ago
p7kve6rnrq4j uber-svr.5 nigelpoulton/tu-demo:v1 wrk3 Running Preparing about a minute ago
axri1z7iykbi uber-svr.6 nigelpoulton/tu-demo:v1 wrk3 Running Preparing about a minute ago
hj7q9sxfszq7 uber-svr.7 nigelpoulton/tu-demo:v1 mgr3 Running Preparing about a minute ago
cbzi9k0c06k3 uber-svr.8 nigelpoulton/tu-demo:v1 mgr2 Running Preparing about a minute ago
qei05mrhzsun uber-svr.9 nigelpoulton/tu-demo:v1 wrk1 Running Preparing about a minute ago
nhjvnvr2z9pb uber-svr.10 nigelpoulton/tu-demo:v1 mgr3 Running Preparing about a minute ago
1p6f9btgh566 uber-svr.11 nigelpoulton/tu-demo:v1 mgr1 Running Preparing about a minute ago
ritvd57hm0eg uber-svr.12 nigelpoulton/tu-demo:v1 wrk1 Running Preparing about a minute ago
- 在游览器查看服务状态

- 升级服务——采用一种阶段性方式:每次更新两个服务,中间间隔20s
root@mgr1:~# docker service update \
> --image nigelpoulton/tu-demo:v2 \
> --update-parallelism 2 \
> --update-delay 20s uber-svr
uber-svr
overall progress: 12 out of 12 tasks
1/12: running [==================================================>]
2/12: running [==================================================>]
3/12: running [==================================================>]
4/12: running [==================================================>]
5/12: running [==================================================>]
6/12: running [==================================================>]
7/12: running [==================================================>]
8/12: running [==================================================>]
9/12: running [==================================================>]
10/12: running [==================================================>]
11/12: running [==================================================>]
12/12: running [==================================================>]
verify: Service converged
- 查看服务的升级过程
root@mgr2:~# docker service ps uber-svr
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
mc5ni9z3rbit uber-svr.1 nigelpoulton/tu-demo:v1 wrk2 Running Running 8 minutes ago
p6tqug5eafww uber-svr.2 nigelpoulton/tu-demo:v1 wrk2 Running Running 8 minutes ago
vu97ofssg4g4 uber-svr.3 nigelpoulton/tu-demo:v1 mgr1 Running Running 7 minutes ago
j1vpg5f5rqk2 uber-svr.4 nigelpoulton/tu-demo:v1 mgr2 Running Running 8 minutes ago
rn4locdc1k2z uber-svr.5 nigelpoulton/tu-demo:v2 wrk3 Running Running 11 seconds ago
p7kve6rnrq4j \_ uber-svr.5 nigelpoulton/tu-demo:v1 wrk3 Shutdown Shutdown 12 seconds ago
i257cl5ssjpm uber-svr.6 nigelpoulton/tu-demo:v2 mgr1 Running Running about a minute ago
axri1z7iykbi \_ uber-svr.6 nigelpoulton/tu-demo:v1 wrk3 Shutdown Shutdown about a minute ago
jltt3ehhns5h uber-svr.7 nigelpoulton/tu-demo:v2 mgr3 Running Running 45 seconds ago
hj7q9sxfszq7 \_ uber-svr.7 nigelpoulton/tu-demo:v1 mgr3 Shutdown Shutdown 58 seconds ago
lhpt4mdqf9v9 uber-svr.8 nigelpoulton/tu-demo:v2 mgr2 Running Running 57 seconds ago
cbzi9k0c06k3 \_ uber-svr.8 nigelpoulton/tu-demo:v1 mgr2 Shutdown Shutdown 59 seconds ago
qei05mrhzsun uber-svr.9 nigelpoulton/tu-demo:v1 wrk1 Running Running 8 minutes ago
hzmc75i2s5mp uber-svr.10 nigelpoulton/tu-demo:v2 mgr3 Running Running 22 seconds ago
nhjvnvr2z9pb \_ uber-svr.10 nigelpoulton/tu-demo:v1 mgr3 Shutdown Shutdown 24 seconds ago
x82qsfdfpmsw uber-svr.11 nigelpoulton/tu-demo:v2 wrk3 Running Running about a minute ago
1p6f9btgh566 \_ uber-svr.11 nigelpoulton/tu-demo:v1 mgr1 Shutdown Shutdown about a minute ago
q34d1v9nx1gs uber-svr.12 nigelpoulton/tu-demo:v2 wrk1 Ready Preparing 2 seconds ago
ritvd57hm0eg \_ uber-svr.12 nigelpoulton/tu-demo:v1 wrk1 Shutdown Running 2 seconds ago
root@mgr2:~# docker service ps uber-svr
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
n70dergpucz2 uber-svr.1 nigelpoulton/tu-demo:v2 wrk2 Running Running about a minute ago
mc5ni9z3rbit \_ uber-svr.1 nigelpoulton/tu-demo:v1 wrk2 Shutdown Shutdown 2 minutes ago
q2kcpfpdbl3y uber-svr.2 nigelpoulton/tu-demo:v2 wrk2 Running Running about a minute ago
p6tqug5eafww \_ uber-svr.2 nigelpoulton/tu-demo:v1 wrk2 Shutdown Shutdown 2 minutes ago
mk1v6ue3fimk uber-svr.3 nigelpoulton/tu-demo:v2 mgr1 Running Running about a minute ago
vu97ofssg4g4 \_ uber-svr.3 nigelpoulton/tu-demo:v1 mgr1 Shutdown Shutdown about a minute ago
7uiuz1h3im99 uber-svr.4 nigelpoulton/tu-demo:v2 mgr2 Running Running 2 minutes ago
j1vpg5f5rqk2 \_ uber-svr.4 nigelpoulton/tu-demo:v1 mgr2 Shutdown Shutdown 2 minutes ago
rn4locdc1k2z uber-svr.5 nigelpoulton/tu-demo:v2 wrk3 Running Running 3 minutes ago
p7kve6rnrq4j \_ uber-svr.5 nigelpoulton/tu-demo:v1 wrk3 Shutdown Shutdown 3 minutes ago
i257cl5ssjpm uber-svr.6 nigelpoulton/tu-demo:v2 mgr1 Running Running 4 minutes ago
axri1z7iykbi \_ uber-svr.6 nigelpoulton/tu-demo:v1 wrk3 Shutdown Shutdown 4 minutes ago
jltt3ehhns5h uber-svr.7 nigelpoulton/tu-demo:v2 mgr3 Running Running 3 minutes ago
hj7q9sxfszq7 \_ uber-svr.7 nigelpoulton/tu-demo:v1 mgr3 Shutdown Shutdown 4 minutes ago
lhpt4mdqf9v9 uber-svr.8 nigelpoulton/tu-demo:v2 mgr2 Running Running 4 minutes ago
cbzi9k0c06k3 \_ uber-svr.8 nigelpoulton/tu-demo:v1 mgr2 Shutdown Shutdown 4 minutes ago
8amfntzhx1wl uber-svr.9 nigelpoulton/tu-demo:v2 wrk1 Running Running about a minute ago
qei05mrhzsun \_ uber-svr.9 nigelpoulton/tu-demo:v1 wrk1 Shutdown Shutdown about a minute ago
hzmc75i2s5mp uber-svr.10 nigelpoulton/tu-demo:v2 mgr3 Running Running 3 minutes ago
nhjvnvr2z9pb \_ uber-svr.10 nigelpoulton/tu-demo:v1 mgr3 Shutdown Shutdown 3 minutes ago
x82qsfdfpmsw uber-svr.11 nigelpoulton/tu-demo:v2 wrk3 Running Running 4 minutes ago
1p6f9btgh566 \_ uber-svr.11 nigelpoulton/tu-demo:v1 mgr1 Shutdown Shutdown 4 minutes ago
q34d1v9nx1gs uber-svr.12 nigelpoulton/tu-demo:v2 wrk1 Running Running 2 minutes ago
ritvd57hm0eg \_ uber-svr.12 nigelpoulton/tu-demo:v1 wrk1 Shutdown Shutdown 2 minutes ago
- 查看升级服务的详细信息
root@mgr1:~# docker service inspect --pretty uber-svr
ID: lymtwway58lnow87btpz5at53
Name: uber-svr
Service Mode: Replicated
Replicas: 12
UpdateStatus:
State: completed
Started: 7 minutes ago
Completed: 3 minutes ago
Message: update completed
Placement:
UpdateConfig:
Parallelism: 2
Delay: 20s
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: nigelpoulton/tu-demo:v2@sha256:d3c0d8c9d5719d31b79cca146025fa7d1de4749fef58a7e038cf0ef2ba5eb74c
Init: false
Resources:
Networks: uber-net
Endpoint Mode: vip
Ports:
PublishedPort = 80
Protocol = tcp
TargetPort = 80
PublishMode = ingress
故障排查
- docker节点默认的配置是,服务使用的是json-file日志驱动
- 其他驱动还有:journald、syslog、splunk和gelf
- 查看swarm服务日志
root@mgr1:~# docker service logs uber-svr
uber-svr.3.vu97ofssg4g4@mgr1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.3.vu97ofssg4g4@mgr1 | 10.255.0.7 - - [05/Nov/2019 16:00:39] "GET /static/stylesheets/style.css HTTP/1.1" 200 -
uber-svr.11.1p6f9btgh566@mgr1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.11.1p6f9btgh566@mgr1 | 10.255.0.7 - - [05/Nov/2019 16:00:39] "GET / HTTP/1.1" 200 -
uber-svr.6.i257cl5ssjpm@mgr1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.3.mk1v6ue3fimk@mgr1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.6.axri1z7iykbi@wrk3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.6.axri1z7iykbi@wrk3 | 10.255.0.7 - - [05/Nov/2019 16:02:39] "GET / HTTP/1.1" 200 -
uber-svr.5.p7kve6rnrq4j@wrk3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.11.x82qsfdfpmsw@wrk3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.5.rn4locdc1k2z@wrk3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.8.lhpt4mdqf9v9@mgr2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.4.7uiuz1h3im99@mgr2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.4.j1vpg5f5rqk2@mgr2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.8.cbzi9k0c06k3@mgr2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.7.jltt3ehhns5h@mgr3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.10.hzmc75i2s5mp@mgr3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.1.n70dergpucz2@wrk2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.2.q2kcpfpdbl3y@wrk2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.7.hj7q9sxfszq7@mgr3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.10.nhjvnvr2z9pb@mgr3 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.12.q34d1v9nx1gs@wrk1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.9.8amfntzhx1wl@wrk1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.12.ritvd57hm0eg@wrk1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.9.qei05mrhzsun@wrk1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.2.p6tqug5eafww@wrk2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.2.p6tqug5eafww@wrk2 | 10.255.0.7 - - [05/Nov/2019 16:02:55] "POST / HTTP/1.1" 200 -
uber-svr.1.mc5ni9z3rbit@wrk2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
uber-svr.1.mc5ni9z3rbit@wrk2 | 10.255.0.7 - - [05/Nov/2019 16:00:41] "GET /favicon.ico HTTP/1.1" 404 -
- 查看日志的命令可以加参数 --follow进行跟踪、--tail显示最新日志、--details获取额外信息
docker Swarm——命令
- docker swarm init 创建一个新的swarm,执行这个命令的节点称为管理节点
- docker swarm join-token 查询接入管理节点和工作节点到现有swarm时所使用的命令和Token
- 增加管理节点——docker swarm join-token manager
- 增加工作节点——docker swarm join-token work
- docker node ls 列出swarm所有节点及相关信息
- docker service create 创建新服务
- docker service ls 列出swarm中运行的服务
- docker service ps <service> 获取更多关于服务服务的信息
- docker service inspect 获取服务的详细信息
- docker service scale 用于对服务副本数量进行增减
- docker service update 对运行中的服务进行属性变更
- docker service logs 查看服务的日志
- docker service rm 从swarm删除服务