swarm集群-使用docker stack一次性部署
9、使用docker stack一次性部署
通过上面8步的操作,可以看出,部署这种服务首先使用docker run 运行一个mysql服务(当然也可以使用docker service --replicas 1仅指定在一个节点上运行),然后再使用docker service 运行微服务。
而docker stack可以将所有服务,一次性的编排到docker-compose.yml文件中去,然后一次性的使用docker deploy启动。
1、创建docker-compose.yml配置文件
内容如下:
[root@server101 mynet]# cat docker-compose.yml
#!/bin/bash
version: "3.9"
services:
demo:
image: demo:1.0
ports:
- "8080:8080"
networks:
- my-net
deploy:
replicas: 3 #定义副本个数为3,可参考上面的配置定义
networks: #因为在外面定义了overlay网络,所以这儿直接引用就可以了,否则docker stack deploy会再创建一个网络
my-net:
external: true
name: my-net
2、启动部署
#docker stack deploy -c docker-compose.yml mystack
最后一个名称为此stack的名称.
1、查看stack
不同的docker-compose,此docker stack 命令可以任意的manager节点执行:
[root@server103 ~]# docker stack ls
NAME SERVICES ORCHESTRATOR
mystack 1 Swarm
2、查看services
在services后面,必须要添加上查看哪一个stack的名称:
[root@server103 ~]# docker stack services mystack
ID NAME MODE REPLICAS IMAGE PORTS
ol2mjqfawysd mystack_demo replicated 3/3 demo:1.0 *:8080->8080/tcp
3、查看运行的服务 ps
与services相同,ps后面必须要有stack的名称:
[root@server103 ~]# docker stack ps mystack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE pg388nz9s8ur mystack_demo.1 demo:1.0 server104 Running Running 17 minutes ago
m2lp4q8vd1e4 mystack_demo.2 demo:1.0 server101 Running Running 17 minutes ago
z0x1t7k68xt9 mystack_demo.3 demo:1.0 server103 Running Running 17 minutes ago
4、查看日志
可以完整的看到个服务的日志,这样就不用去每一个服务去查看日志了:
# docker service logs -f mystack_demo
mystack_demo.1.m2lp4q8vd1e4@server101
mystack_demo.2.m2lp4q8vd1e4@server102
mystack_demo.3.m2lp4q8vd1e4@server103
7、扩容与缩容
同样的,可以使用service进行扩容和缩容:
[root@server101 mynet]# docker service update --replicas=4 mystack_demo
mystack_demo
overall progress: 4 out of 4 tasks
1/4: running [==================================================>]
2/4: running [==================================================>]
3/4: running [==================================================>]
4/4: running [==================================================>]
verify: Service converged
查看已经扩容到4个节点运行:
[root@server101 mynet]# docker stack services mystack
ID NAME MODE REPLICAS IMAGE PORTS
obte5a60yrd7 mystack_demo replicated 4/4 demo:1.0 *:8080->8080/tcp
在4个节点上,每个节点上一个:
[root@server101 mynet]# docker stack ps mystack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xryg1lu33ax4 mystack_demo.1 demo:1.0 server103 Running Running 3 minutes ago
njiqp66twhxt mystack_demo.2 demo:1.0 server104 Running Running 4 minutes ago
8s5zvz3cgi56 mystack_demo.3 demo:1.0 server101 Running Running 3 minutes ago
pu6mjfr78u7l mystack_demo.4 demo:1.0 server102 Running Running 2 minutes ago
8、查看网络
#docker inspect my-net
"Peers": [
{
"Name": "a5ee38d1eec0",
"IP": "192.168.56.102"
},
{
"Name": "8f941b69bd29",
"IP": "192.168.56.101"
},
{
"Name": "4b459df756b4",
"IP": "192.168.56.104"
},
{
"Name": "b24368b6ee59",
"IP": "192.168.56.103"
}
9、移除服务
# docker stack rm mystack
Removing service mystack_demo