一、Docker Swarm简介¶
Docker Swarm有两个核心组件,一是安全集群,二是编排引擎。
Docker Swarm包含两个方面:一个企业级的Docker安全集群,以及一个微服务应用编排引擎。
集群方面,Swam将一个或多个Docker节点组织起来,方便用户以集群的方式管理它们。Docker Swarm默认有加密的分布式集群存储、加密网络、公用TLS、安全集群接入令牌以及一套简化数字证书管理的PKI。用户可以自如地添加或删除节点。
编排方面,Docker Swarm提供了一套丰富的API使得部署和管理复杂的微服务应用变得易如反掌。通过将应用定义在声明式配置文件中,就可以使用原生的Docker命令完成部署。还可以执行滚动升级、回滚以及扩缩容操作,同样基于简单的命令可以完成。
二、Docker Swarm详解¶
2.1 Swarm初步介绍¶
从集群角度来看,一个Swarm由一个或多个Docker节点组成。节点可以是物理服务器、虚拟机、树莓派或云实例。
节点会被配置为管理节点或工作节点。其中管理节点负责集群控制面;工作节点接收来自管理节点的任务并执行。
Swarm的配置和状态信息保存在一套位于所有管理节点上的分布式ectd数据库中。该数据库运行于内存中,并保持数据的最新状态。
Swarm最小调度单元是服务,随Swarm引入的,在API是一个新的对象元素。
2.2 搭建安全Swarm集群¶
2.2.1 搭建Swarm集群¶
2.2.2 Swarm管理器高可用性(HA)¶
Swarm实现了一种主从方式的多管理节点的HA。通常处于活动状态的管理节点被称为"主节点",主节点也是唯一一个会对Swarm发送控制命令的节点。
关于HA,以下是两条最佳实践原则: * 部署奇数个管理节点 * 不要部署太多管理节点(建议3个或5个)
2.2.3 内置的Swarm安全机制¶
Swarm集群内置有繁多的安全机制,并提供了开箱即用的合理的默认配置。
2.2.4 锁定Swarm¶
一个旧的管理节点重新接入Swarm会自定解密并获得Raft数据库中长时间序列的访问权,这会带来隐患。进行备份恢复可能会抹掉最新的Swarm配置。
针对以上问题,Docker提供了自动锁机制来锁定Swarm,这会强制要求重启的管理节点在提供一个集群解锁码之后才有权从新接入集群。
2.3 部署Swarm服务¶
使用服务仍能够配置大多数熟悉的容器属性。此外还增加了额外的特性,将其告知Docker后,Docker会负责进行服务的部署和管理。
2.3.1 创建Swarm服务¶
下面以例子来说明如何创建Swarm服务: 1、执行docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci命令创建一个名为web-fe新的服务,将每个节点上的8080端口映射到服务副本内部的8080端口,并且告知Docker总是有5个此服务的副本。
root@zq-virtual-machine:/home/zq/Desktop# docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
kl1zr1mq07b2giloiwk40xpcj
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
其中指令参数含义如下: * --name参数用于命名 * -p参数用于指定映射端口 * --replicas用于告知Docker有几个此服务的副本 * nigelpoulton/pluralsight-docker-ci用于告知Docker哪个镜像用于副本
2.3.2 查看Swarm服务¶
1、执行docker service ls命令查看Swarm中所有运行中的服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 5/5 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
2、执行docker service ps命令查看服务副本列表及各副本的状态。其中每一个副本作为一行输出,显示了各副本分别运行在Swarm的哪个节点上以及期望的状态和实际状态。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
i49cp3f7ubhv web-fe.1 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 16 minutes ago
d7b1v256cnlw web-fe.2 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 15 minutes ago
nsrsixz6h51d \_ web-fe.2 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 15 minutes ago
a71d38wr0380 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 16 minutes ago
vo3hz34tynsg web-fe.4 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 16 minutes ago
pk81lelw03fp web-fe.5 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 15 minutes ago
xndi18snfgsr \_ web-fe.5 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 15 minutes ago
3、执行docker service inspect --pretty web-fe命令只查看web-fe详细信息。其中--pretty参数是限制输出自己感兴趣的内容,并以易于阅读的格式打印出来。
root@zq-virtual-machine:/home/zq/Desktop# docker service inspect --pretty web-fe
ID: kl1zr1mq07b2giloiwk40xpcj
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:9b6241ad65941128fb03eb2d1ec7d3c161c26894782ad25e4619131fe68667fe
Init: false
Resources:
Endpoint Mode: vip
Ports:
PublishedPort = 8080
Protocol = tcp
TargetPort = 8080
PublishMode = ingress
2.3.3 副本服务VS全局服务¶
服务的默认复制模式是副本模式,这种模式会部署期望数量的服务副本,并尽可能均匀地将各个副本分布在整个集群中。
全局模式这种模式,每个节点上仅运行一个脚本。通过--mode global参数来实现。 副本模式和全局模式二者命令格式如下:
root@zq-virtual-machine:/home/zq/Desktop# docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
root@zq-virtual-machine:/home/zq/Desktop# docker service create --mode global --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
2.3.4 服务的扩缩容¶
在底层实现上,Swarm执行了一个调度算法,默认将副本尽量均衡分配给Swarm中的所有节点。
1、执行docker server scale web-fe=10命令对web-fe进行扩容。将副本数增加到10个。
root@zq-virtual-machine:/home/zq/Desktop# docker service scale web-fe=10
web-fe scaled to 10
overall progress: 10 out of 10 tasks
1/10: running [==================================================>]
2/10: running [==================================================>]
3/10: running [==================================================>]
4/10: running [==================================================>]
5/10: running [==================================================>]
6/10: running [==================================================>]
7/10: running [==================================================>]
8/10: running [==================================================>]
9/10: running [==================================================>]
10/10: running [==================================================>]
verify: Service converged
2、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 10/10 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
3、执行docker service ps web-fe命令查看各个节点在服务副本分布情况。观察到,服务副本在各个节点是均匀分布的。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
i49cp3f7ubhv web-fe.1 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 36 minutes ago
d7b1v256cnlw web-fe.2 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 35 minutes ago
nsrsixz6h51d \_ web-fe.2 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 35 minutes ago
a71d38wr0380 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 36 minutes ago
vo3hz34tynsg web-fe.4 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 36 minutes ago
pk81lelw03fp web-fe.5 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 35 minutes ago
xndi18snfgsr \_ web-fe.5 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 35 minutes ago
fxfb2qhk2w1p web-fe.6 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 3 minutes ago
lcr2zg7fvubm web-fe.7 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 3 minutes ago
zh7mrxq1kk1b web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 2 minutes ago
yzzga1e2vuyt \_ web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
qknz82dl80v7 \_ web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
n2q48rjciwaa web-fe.9 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 2 minutes ago
wapxh0u7s9qi \_ web-fe.9 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
rtwwob8e6age \_ web-fe.9 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
sk2iytsjkfny web-fe.10 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 2 minutes ago
q7n5d0bicmrp \_ web-fe.10 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
am5awen1qf5g \_ web-fe.10 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
4、执行docker service scale web-fe=5命令将副本数从10个降为5个。
root@zq-virtual-machine:/home/zq/Desktop# docker service scale web-fe=5
web-fe scaled to 5
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5:
5/5:
verify: Service converged
5、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 10/5 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
2.3.5 删除服务¶
1、执行docker service rm web-fe命令删除之前部署的服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service rm web-fe
web-fe
2、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
2.3.6 滚动升级¶
对部署的应用进行滚动升级是常见的操作。 1、执行docker network create -d overlay uber-net命令创建一个名为uber-net的覆盖网络。(可选)
root@zq-virtual-machine:/home/zq/Desktop# docker network create -d overlay uber-net
0ntmifmkkvjlamdjs65kyehqs
2、执行docker network ls命令查看网络是否创建成功。观察到,已成功创建网络。(可选)
root@zq-virtual-machine:/home/zq/Desktop# docker network ls
NETWORK ID NAME DRIVER SCOPE
0ntmifmkkvjl uber-net overlay swarm
3、执行docker service create --name uber-svc --network uber-net -p 80:80 --replicas 12 nigelpoulton/tu-demo:v1命令创建一个名为uber-svc新的服务,并将其接入uber-net网络。
root@zq-virtual-machine:/home/zq/Desktop# docker service create --name uber-svc --network uber-net -p 80:80 --replicas 12 nigelpoulton/tu-demo:v1
以上指令参数说明如下: * --name指定服务名字为uber-svc * --network指定网络为uber-net * -p指定将Swarm80端口整体暴露出来,并映射到12个容器副本的80端口 * --replicas用于告知Docker有几个此服务的副本 * nigelpoulton/tu-demo:v1用于声明所有副本都基于nigelpoulton/tu-demo:v1镜像
4、执行docker service ls命令查看操作是否成功。这里观察到,操作已成功完成。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
mxkgw950zvqs uber-svc replicated 12/12 nigelpoulton/tu-demo:v1 *:80->80/tcp
5、执行docker service ps uber-svc命令详细查看uber-svc服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps uber-svc
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
q9zq4di34cxu uber-svc.1 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
xewhrp13pc7j uber-svc.2 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
9d3ujesk5mkh uber-svc.3 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
4i34gzd8rum2 uber-svc.4 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running 43 seconds ago
ketlg4y903z9 \_ uber-svc.4 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
n6dftu6woafh uber-svc.5 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
zo0eer3yyskg uber-svc.6 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
sm8wrdj6d13m uber-svc.7 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
u7fq39358280 uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running 46 seconds ago
uj9eyypcoty8 \_ uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
s4mpcjos8vlc uber-svc.9 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
pwjr54dgxfmr uber-svc.10 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running 42 seconds ago
p2zcvjqg1ihe \_ uber-svc.10 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
s6gam56mcg0a uber-svc.11 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running 46 seconds ago
lzvlgyfp68sz \_ uber-svc.11 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
aazg60gytw4d uber-svc.12 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
6、使用Swarm中的任一节点IP,进入80端口界面,查看服务运行状态。观察到,这是一个简单的投票程序,能够注册对"football"或"soccer"的投票。

假设投票结束,公司希望开启一轮新的投票。现在已经为下一轮投票构建了一个新的镜像,并推送到了Docker Hub仓库,新镜像的tag由v1变更为v2。此次升级采用一种阶段性的方式——每次更新两个副本,中间间隔20s。
1、执行docker service update --image nigelpoulton/tu-demo:v2 --update-parallelism 2 --update-delay 20s uber-svc命令升级任务。
root@zq-virtual-machine:~# docker service update --image nigelpoulton/tu-demo:v2 --update-parallelism 2 --update-delay 20s uber-svc
uber-svc
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
以上指令参数说明如下: * --update-parallelism:声明每次更新2个副本 * --update-delay:声明每次使用新镜像时有20s的延迟
2、执行docker service ps uber-svc命令查看服务具体情况。这里观察到,有些副本的版本号是v2而有些依然是v1。
root@zq-virtual-machine:~# docker service ps uber-svc
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ddfs0lg2r3k0 uber-svc.1 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 18 minutes ago
nf6y84hocq0a \_ uber-svc.1 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 18 minutes ago
q9zq4di34cxu \_ uber-svc.1 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 2 hours ago "error while removing network:…"
dlew6u8qwrjz uber-svc.2 nigelpoulton/tu-demo:v2 zq-virtual-machine Running Running 17 minutes ago
dx6u94bpubxl \_ uber-svc.2 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 17 minutes ago
xewhrp13pc7j \_ uber-svc.2 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 2 hours ago "error while removing network:…"
sorylfxqn578 uber-svc.3 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 21 minutes ago
rnonaqvsg2tu \_ uber-svc.3 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 21 minutes ago
9d3ujesk5mkh \_ uber-svc.3 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 2 hours ago "error while removing network:…"
pvmxldqdedsq uber-svc.4 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 20 minutes ago
5l6domk7n3zj \_ uber-svc.4 nigelpoulton/tu-demo:v2 localhost.localdomain Shutdown Failed 18 minutes ago "error while removing network:…"
5b54h0pi198j \_ uber-svc.4 jeckjohn/tu-demo:v2 localhost.localdomain Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
8csa989cjxwy \_ uber-svc.4 jeckjohn/tu-demo:v2 localhost.localdomain Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
f5101ru4mxmc \_ uber-svc.4 jeckjohn/tu-demo:v2 zq-virtual-machine Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
hzjxe3zojzzn uber-svc.5 nigelpoulton/tu-demo:v2 zq-virtual-machine Running Running 17 minutes ago
s8cvea9zuq9t \_ uber-svc.5 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 17 minutes ago
n6dftu6woafh \_ uber-svc.5 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Failed 2 hours ago "error while removing network:…"
8rxtkpw2m54q uber-svc.6 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 21 minutes ago
9ijpo7muzhc6 \_ uber-svc.6 jeckjohn/tu-demo:v2 localhost.localdomain Shutdown Shutdown 21 minutes ago
i7oltlw6nimt \_ uber-svc.6 jeckjohn/tu-demo:v2 localhost.localdomain Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
c6tazysu4wyz \_ uber-svc.6 jeckjohn/tu-demo:v2 zq-virtual-machine Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
iwjysz5uwjce \_ uber-svc.6 jeckjohn/tu-demo:v2 localhost.localdomain Shutdown Rejected 21 minutes ago "No such image: jeckjohn/tu-de…"
n7vnqkmhflqm uber-svc.7 nigelpoulton/tu-demo:v2 zq-virtual-machine Running Running 17 minutes ago
f0nczgooeb8a \_ uber-svc.7 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 17 minutes ago
sm8wrdj6d13m \_ uber-svc.7 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 2 hours ago "error while removing network:…"
y19vzp3om6ex uber-svc.8 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 20 minutes ago
oqchgsaageon \_ uber-svc.8 nigelpoulton/tu-demo:v2 localhost.localdomain Shutdown Failed 18 minutes ago "error while removing network:…"
y9em0o457n29 \_ uber-svc.8 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 20 minutes ago
u7fq39358280 \_ uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 2 hours ago "error while removing network:…"
uj9eyypcoty8 \_ uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Failed 3 hours ago "error while removing network:…"
o1f9m2zsakex uber-svc.9 nigelpoulton/tu-demo:v2 zq-virtual-machine Running Running 17 minutes ago
qbm65do5i21l \_ uber-svc.9 nigelpoulton/tu-demo:v2 localhost.localdomain Shutdown Failed 17 minutes ago "error while removing network:…"
9nkbgfwewnkg \_ uber-svc.9 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 18 minutes ago
s4mpcjos8vlc \_ uber-svc.9 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Failed 2 hours ago "error while removing network:…"
e4lwqja4jyg7 uber-svc.10 nigelpoulton/tu-demo:v2 zq-virtual-machine Running Running 17 minutes ago
4oxkpxxv64b2 \_ uber-svc.10 nigelpoulton/tu-demo:v2 localhost.localdomain Shutdown Failed 17 minutes ago "error while removing network:…"
5ydc2afqowtl \_ uber-svc.10 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 18 minutes ago
pwjr54dgxfmr \_ uber-svc.10 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 2 hours ago
p2zcvjqg1ihe \_ uber-svc.10 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Shutdown 3 hours ago
sgsomyqqtsu1 uber-svc.11 nigelpoulton/tu-demo:v2 localhost.localdomain Running Running 20 minutes ago
w6egsd7ngd54 \_ uber-svc.11 nigelpoulton/tu-demo:v2 localhost.localdomain Shutdown Shutdown 18 minutes ago
fk1buw9srfvy \_ uber-svc.11 nigelpoulton/tu-demo:v1 zq-virtual-machine Shutdown Shutdown 20 minutes ago
3、使用Swarm中的任一节点IP,进入80端口界面,查看服务运行状态。观察到,页面已更新。

4、执行docker service inspect --pretty uber-svc命令查看uber-svc服务的具体情况。观察到,所有运行副本的节点都会使用前面创建的uber-net覆盖网络。
root@zq-virtual-machine:~# docker service inspect --pretty uber-svc
ID: mxkgw950zvqsd9zgsgc3s7ur2
Name: uber-svc
Service Mode: Replicated
Replicas: 12
UpdateStatus:
State: completed
Started: 27 minutes ago
Completed: 22 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:af111729d35a09fd24c25607ec045184bb8d76e37714dfc2d9e55d13b3ebbc67
Init: false
Resources:
Networks: uber-net
Endpoint Mode: vip
Ports:
PublishedPort = 80
Protocol = tcp
TargetPort = 80
PublishMode = ingress
2.4 问题定位¶
Docker节点默认配置是,服务使用json-file日志驱动,其他驱动还有journald(仅用于运行有systemd的Linux主机)、syslog、splunk和gelf。
journald和json-file容易配置,二者可用于docker service logs命令,命令格式为docker service logs <service-name>。这里注意:并非所有的日志驱动都支持该命令。如果使用第三方日志驱动,就需要使用相应日志平台的原生工具来查看日志。
以下是在/etc/docker/daemon.json配置文件中定义使用syslog作为日志驱动的实例:
{
"log-driver": "syslog"
}
通过在执行docker service create命令时传入--logdriver和--log-opts参数可以强制某服务使用一个不同的日志驱动,这会覆盖/etc/docker/daemon.json中的配置。
以下是执行docker service logs uber-svc命令后的部分回显消息。其中可以添加-follow参数进行跟踪、使用--tail参数显示最近的日志、使用--details获取额外细节。
root@zq-virtual-machine:~# docker service logs uber-svc
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Starting gunicorn 20.1.0
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Using worker: sync
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [8] [INFO] Booting worker with pid: 8
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [9] [INFO] Booting worker with pid: 9
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [10] [INFO] Booting worker with pid: 10
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [11] [INFO] Booting worker with pid: 11
三、Docker Swarm相关操作¶
3.1 创建Swarm¶
1、执行docker swarm init --advertise-addr 192.168.100.130:2377 --listen-addr 192.168.100.130:2377命令创建一个新的Swarm,同时执行该命令的节点会成为第一个管理节点。
root@zq-virtual-machine:~# docker swarm init --advertise-addr 192.168.100.130:2377 --listen-addr 192.168.100.130:2377
Swarm initialized: current node (oz4yqja5d46z4x4sft4h9qilm) is now a manager.
针对上面指令分解说明: * docker swarm init:通知Docker初始化一个新的Swarm,并将自身作为第一个管理节点,同时这个节点开启Swarm模式 * --advertise-addr:指定其他节点用来连接到当前管理节点的IP和端口。这是为了防止节点有多个IP不能确认 * --listen-addr:指定用于承载Swarm流量的IP和端口,这也是为了防止节点有多个IP不能确认
说明:Swarm模式下的操作默认运行2377端口!!!
2、继续执行docker info命令查看 swarm 的当前状态。观察到Swarm状态为active。
root@zq-virtual-machine:~# docker info
......
Swarm: active
NodeID: oz4yqja5d46z4x4sft4h9qilm
Is Manager: true
ClusterID: t80w9wpih8nz23ppbkzwux1p7
Managers: 1
Nodes: 1
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
......
3、继续执行docker node ls命令列出Swarm中的节点。MANAGER一栏中显示【Leader】代表管理节点。
root@zq-virtual-machine:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
oz4yqja5d46z4x4sft4h9qilm * zq-virtual-machine Ready Active Leader 20.10.18
说明:节点ID后面的【*】代表此时登录的节点!!!
3.2 查询节点到现有Swarm命令和Tocken¶
3.2.1 查询管理节点到现有Swarm命令和Tocken¶
1、登录到mgr1执行docker swarm join-token manger命令来获取添加工作节点到Swarm的命令和Token。
root@zq-virtual-machine:~# docker swarm join-token manger
To add a manger to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377
3.2.2 查询工作节点到现有Swarm命令和Tocken¶
1、登录到mgr1执行docker swarm join-token worker命令来获取添加工作节点到Swarm的命令和Token。
root@zq-virtual-machine:~# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377
3.3 管理/工作节点添加到现有Swarm¶
3.3.1 管理节点添加到现有Swarm¶
1、登录到mgr2执行docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377命令将工作节点wrk1添加到Swarm。注意192.168.100.110是mgr2的地址。
[root@localhost student]# docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377
This node joined a swarm as a manger.
说明:--advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377这是可选配置!!!
3.3.2 工作节点添加到现有Swarm¶
1、登录到wrk1执行docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377命令将工作节点wrk1添加到Swarm。注意192.168.100.110是wrk1的地址。
[root@localhost student]# docker swarm join --token SWMTKN-1-3y222gkw18wftep185ag02av0csb790z2pctywmistl3728gtw-6z0ncroputkh9ttdu0cp7iso6 192.168.100.130:2377 --advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377
This node joined a swarm as a worker.
说明:--advertise-addr 192.168.100.110:2377 --listen-addr 192.168.100.110:2377这是可选配置!!!
3.4 查询全部节点¶
1、继续执行docker node ls命令列出Swarm中的节点。MANAGER一栏中显示【Leader】代表管理节点。
root@zq-virtual-machine:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
oz4yqja5d46z4x4sft4h9qilm * zq-virtual-machine Ready Active Leader 20.10.18
说明:节点ID后面的【*】代表此时登录的节点!!!
3.5 锁定Swarm¶
1、在管理节点上执行docker swarm update --autolock=true命令启用锁。注意:这里会生成钥匙,如SWMKEY-1-E2laq+kwZsfvcjcOsYq2Bi15vCdQOqxKh3YIfnji9LA,解锁时会用到。
root@zq-virtual-machine:/home/zq/Desktop# docker swarm update --autolock=true
Swarm updated.
To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:
SWMKEY-1-E2laq+kwZsfvcjcOsYq2Bi15vCdQOqxKh3YIfnji9LA
Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.
2、在管理节点上继续执行service docker restart命令重启docker。
root@zq-virtual-machine:/home/zq/Desktop# service docker restart
3、在管理节点上继续执行docker node ls命令查看Swarm节点。观察到已被锁定。
root@zq-virtual-machine:/home/zq/Desktop# docker node ls
Error response from daemon: Swarm is encrypted and needs to be unlocked before it can be used. Please use "docker swarm unlock" to unlock it.
3.6 解锁Swarm¶
1、在管理节点上执行docker swarm unlcok命令解锁。输入钥匙即可解锁。
root@zq-virtual-machine:/home/zq/Desktop# docker swarm unlock
Please enter unlock key:
2、在管理节点上继续执行docker node ls命令查看Swarm节点。观察到已被解锁。
t@zq-virtual-machine:/home/zq/Desktop# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
g4i1tmqc0rvnzeh51l2dks4jw localhost.localdomain Ready Active 20.10.18
q9n8xqjyxx1z3gbn3dncobzpg localhost.localdomain Ready Active 20.10.18
oz4yqja5d46z4x4sft4h9qilm * zq-virtual-machine Ready Active Leader 20.10.18
3.7 创建新服务¶
3.7.1 创建副本服务(默认)¶
1、执行docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci命令创建一个名为web-fe新的服务,将每个节点上的8080端口映射到服务副本内部的8080端口,并且告知Docker总是有5个此服务的副本。
root@zq-virtual-machine:/home/zq/Desktop# docker service create --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
kl1zr1mq07b2giloiwk40xpcj
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
其中指令参数含义如下: * --name参数用于命名 * -p参数用于指定映射端口 * --replicas用于告知Docker有几个此服务的副本 * nigelpoulton/pluralsight-docker-ci用于告知Docker哪个镜像用于副本
3.7.2 创建全局服务¶
1、执行docker service create --mode global --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci命令创建一个名为web-fe新的服务,
root@zq-virtual-machine:/home/zq/Desktop# docker service create --mode global --name web-fe -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci
其中指令参数含义如下: * --mode参数用于指明全局 * --name参数用于命名 * -p参数用于指定映射端口 * --replicas用于告知Docker有几个此服务的副本 * nigelpoulton/pluralsight-docker-ci用于告知Docker哪个镜像用于副本
3.8 查看Swarm服务¶
1、执行docker service ls命令查看Swarm中所有运行中的服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 5/5 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
2、执行docker service ps命令查看服务副本列表及各副本的状态。其中每一个副本作为一行输出,显示了各副本分别运行在Swarm的哪个节点上以及期望的状态和实际状态。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
i49cp3f7ubhv web-fe.1 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 16 minutes ago
d7b1v256cnlw web-fe.2 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 15 minutes ago
nsrsixz6h51d \_ web-fe.2 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 15 minutes ago
a71d38wr0380 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 16 minutes ago
vo3hz34tynsg web-fe.4 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 16 minutes ago
pk81lelw03fp web-fe.5 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 15 minutes ago
xndi18snfgsr \_ web-fe.5 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 15 minutes ago
3、执行docker service inspect --pretty web-fe命令只查看web-fe详细信息。其中--pretty参数是限制输出自己感兴趣的内容,并以易于阅读的格式打印出来。
root@zq-virtual-machine:/home/zq/Desktop# docker service inspect --pretty web-fe
ID: kl1zr1mq07b2giloiwk40xpcj
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:9b6241ad65941128fb03eb2d1ec7d3c161c26894782ad25e4619131fe68667fe
Init: false
Resources:
Endpoint Mode: vip
Ports:
PublishedPort = 8080
Protocol = tcp
TargetPort = 8080
PublishMode = ingress
3.9 扩缩容服务¶
3.9.1 扩容服务¶
1、执行docker server scale web-fe=10命令对web-fe进行扩容。将副本数增加到10个。
root@zq-virtual-machine:/home/zq/Desktop# docker service scale web-fe=10
web-fe scaled to 10
overall progress: 10 out of 10 tasks
1/10: running [==================================================>]
2/10: running [==================================================>]
3/10: running [==================================================>]
4/10: running [==================================================>]
5/10: running [==================================================>]
6/10: running [==================================================>]
7/10: running [==================================================>]
8/10: running [==================================================>]
9/10: running [==================================================>]
10/10: running [==================================================>]
verify: Service converged
2、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 10/10 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
3、执行docker service ps web-fe命令查看各个节点在服务副本分布情况。观察到,服务副本在各个节点是均匀分布的。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps web-fe
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
i49cp3f7ubhv web-fe.1 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 36 minutes ago
d7b1v256cnlw web-fe.2 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 35 minutes ago
nsrsixz6h51d \_ web-fe.2 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 35 minutes ago
a71d38wr0380 web-fe.3 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 36 minutes ago
vo3hz34tynsg web-fe.4 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 36 minutes ago
pk81lelw03fp web-fe.5 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 35 minutes ago
xndi18snfgsr \_ web-fe.5 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 35 minutes ago
fxfb2qhk2w1p web-fe.6 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 3 minutes ago
lcr2zg7fvubm web-fe.7 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 3 minutes ago
zh7mrxq1kk1b web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Running Running 2 minutes ago
yzzga1e2vuyt \_ web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
qknz82dl80v7 \_ web-fe.8 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
n2q48rjciwaa web-fe.9 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 2 minutes ago
wapxh0u7s9qi \_ web-fe.9 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
rtwwob8e6age \_ web-fe.9 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
sk2iytsjkfny web-fe.10 nigelpoulton/pluralsight-docker-ci:latest zq-virtual-machine Running Running 2 minutes ago
q7n5d0bicmrp \_ web-fe.10 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Shutdown 2 minutes ago
am5awen1qf5g \_ web-fe.10 nigelpoulton/pluralsight-docker-ci:latest localhost.localdomain Shutdown Failed 3 minutes ago "starting container failed: fa…"
3.9.2 缩容服务¶
1、执行docker service scale web-fe=5命令将副本数从10个降为5个。
root@zq-virtual-machine:/home/zq/Desktop# docker service scale web-fe=5
web-fe scaled to 5
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5:
5/5:
verify: Service converged
2、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
kl1zr1mq07b2 web-fe replicated 10/5 nigelpoulton/pluralsight-docker-ci:latest *:8080->8080/tcp
3.10 删除服务¶
1、执行docker service rm web-fe命令删除之前部署的服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service rm web-fe
web-fe
2、执行docker service ls命令检查操作是否成功。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
3.11 变更运行服务属性¶
1、执行docker service create --name uber-svc --network uber-net -p 80:80 --replicas 12 nigelpoulton/tu-demo:v1命令创建一个名为uber-svc新的服务,并将其接入uber-net网络。
root@zq-virtual-machine:/home/zq/Desktop# docker service create --name uber-svc --network uber-net -p 80:80 --replicas 12 nigelpoulton/tu-demo:v1
以上指令参数说明如下: * --name指定服务名字为uber-svc * --network指定网络为uber-net * -p指定将Swarm80端口整体暴露出来,并映射到12个容器副本的80端口 * --replicas用于告知Docker有几个此服务的副本 * nigelpoulton/tu-demo:v1用于声明所有副本都基于nigelpoulton/tu-demo:v1镜像
2、执行docker service ls命令查看操作是否成功。这里观察到,操作已成功完成。
root@zq-virtual-machine:/home/zq/Desktop# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
mxkgw950zvqs uber-svc replicated 12/12 nigelpoulton/tu-demo:v1 *:80->80/tcp
3、执行docker service ps uber-svc命令详细查看uber-svc服务。
root@zq-virtual-machine:/home/zq/Desktop# docker service ps uber-svc
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
q9zq4di34cxu uber-svc.1 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
xewhrp13pc7j uber-svc.2 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
9d3ujesk5mkh uber-svc.3 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
4i34gzd8rum2 uber-svc.4 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running 43 seconds ago
ketlg4y903z9 \_ uber-svc.4 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
n6dftu6woafh uber-svc.5 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
zo0eer3yyskg uber-svc.6 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
sm8wrdj6d13m uber-svc.7 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running about a minute ago
u7fq39358280 uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Running Running 46 seconds ago
uj9eyypcoty8 \_ uber-svc.8 nigelpoulton/tu-demo:v1 localhost.localdomain Shutdown Running about a minute ago
s4mpcjos8vlc uber-svc.9 nigelpoulton/tu-demo:v1 zq-virtual-machine Running Running about a minute ago
3.12 查看服务日志¶
1、执行docker service logs uber-svc命令查看服务日志。其中可以添加-follow参数进行跟踪、使用--tail参数显示最近的日志、使用--details获取额外细节。
root@zq-virtual-machine:~# docker service logs uber-svc
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Starting gunicorn 20.1.0
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [1] [INFO] Using worker: sync
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [8] [INFO] Booting worker with pid: 8
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [9] [INFO] Booting worker with pid: 9
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [10] [INFO] Booting worker with pid: 10
uber-svc.3.rnonaqvsg2tu@zq-virtual-machine | [2022-10-07 04:25:21 +0000] [11] [INFO] Booting worker with pid: 11
3.13 创建网络¶
1、执行docker network create -d overlay uber-net命令创建一个名为uber-net的覆盖网络。(可选)
root@zq-virtual-machine:/home/zq/Desktop# docker network create -d overlay uber-net
0ntmifmkkvjlamdjs65kyehqs
2、执行docker network ls命令查看网络是否创建成功。观察到,已成功创建网络。(可选)
root@zq-virtual-machine:/home/zq/Desktop# docker network ls
NETWORK ID NAME DRIVER SCOPE
0ntmifmkkvjl uber-net overlay swarm