vlambda博客
学习文章列表

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