16boke - 一路博客

Docker系列:16、Docker stack

在之前的文章中我们学习了单个docker主机部署单个容器、单个docker主机部署多个相关联的容器、多个主机组成的swarm集群部署单个服务。但是一般的微服务的生产环境肯定是由多个docker主机一次性部署多个相关联的服务,如果按照以前的做法需要为每个服务单独执行docker service create ...。这样管理肯定不太方便,那有没有一种类似于写docker-compose.yml文件,里面提前定义好需要同时运行的服务,只需要一条命令就可以同时运行这些服务,并部署到docker swarm集群中呢?答案是有的,就是本文介绍的docker stack。

一、介绍

Docker stack是Docker层级关系中的最高一个层级,一个stack就是一组有关联的服务的组合,可以编排在一起,一起管理。

二、使用

与docker-compose一样也需要先编写docker-compose.yml(名字可以随便写),例如:

version: "3"

services:

   #eureka1

   eureka1:

       image: 192.168.28.164:8551/eureka-server:master

       networks:

           swarm_test:

               aliases:

                   - eureka

       ports:

           - 8010:8010

       environment:

           - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka2:8010/eureka/,http://eureka3:8010/eureka/

   

   #eureka2

   eureka2:

       image: 192.168.28.164:8551/eureka-server:master

       networks:

           swarm_test:

               aliases:

                   - eureka

       ports:

           - 8011:8010

       environment:

           - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8010/eureka/,http://eureka3:8010/eureka/

           

   #eureka3

   eureka3:

       image: 192.168.28.164:8551/eureka-server:master

       networks:

           swarm_test:

               aliases:

                   - eureka

       ports:

           - 8012:8010

       environment:

           - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8010/eureka/,http://eureka2:8010/eureka/

networks:

   swarm_test:

       external:

           name: swarm_test

这是启动了三个eureka-server,用来实现微服务的高可用注册中心,由于要加入到swarm集群中,所以网络需要使用之前创建集群的时候建立的swarm_test的overlay网络。由于注册中心也需要互相发现,所以添加environment,名称为ADDITIONAL_EUREKA_SERVER_LIST。

注意:这个名称是在程序的application.yml中提前设置好的:

eureka:

 instance:

   hostname: eureka

   preferIpAddress: true

 client:

   registerWithEureka: false

   fetchRegistry: false

   service-url:

     defaultZone: ${ADDITIONAL_EUREKA_SERVER_LIST}

这样在运行的时候会自动使用这个环境变量。

三、运行

使用docker stack deploy -c XXX.yml eureka-server

其中XXX.yml为你的compose配置文件名,意思是部署一个stack服务,名字为eureka-server,配置文件为XXX.yml

四、命令

列出所有stack:docker stack ls

列出stack中所有任务:docker stack ps

删除stack:docker stack rm

列出stack中所有服务:docker stack services stack-name

五、其他

1、自动集群负载均衡

Docker Service负责保持应用的“理想状态”。例如,理想状态是确保特定服务有二套容器与之对应且持续运行。如果移除某个容器,而非服务,则该服务会自动重启一个容器,如果整个节点挂了,则会自动到集群中开启另一个节点。所以如果要删除某个服务,必须 docker service rm ** 或 docker stack rm **


Docker