Docker-Docker Swarm

1.1 购买服务器

购买3台服务器,所有主机都安装dockerdocker-compose

1.2 Swarm集群产生

compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。

1、服务器硬件要求

硬件资源 最小配置 推荐配置
CPU 1 CPU 2CPU
内存 1GB 2~4GB
硬盘 20 GB 40GB

2、节点信息

主机名 IP地址 具体说明
docker01 8.134.122.252 swarm-manager节点
docker02 8.134.114.8 swarm-work01节点
docker03 8.134.123.77 swarm-work02节点

3、当前服务器应用状态

4、容器化部署存在问题

  • 怎么保证数据完整性,怎么去管很多微服容器,怎么去更新容器而不影响客户的业务?
  • 如果容器down掉了。怎么自动恢复?

=》解决以上问题,docker-swarm横空出世!!!。==

1.3 安装docker-swarm

1、基本概述

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,可以将组成某个应该的多个docker容器编排在一起,同时管理。而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口(docker stack)统一管理这些Docker主机上的各种Docker资源。

stack 是构成特定环境中的 service 集合, 它是自动部署多个相互关联的服务的简便方法,而无需单独定义每个服务。stack file 是一种 yaml 格式的文件,类似于 docker-compose.yml 文件,它定义了一个或多个服务,并定义了服务的环境变量、部署标签、容器数量以及相关的环境特定配置等。

2、官方文档:https://docs.docker.com/engine/swarm/

3、Docker Swarm由两部分组成

  • Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理。
  • 应用编排:有一套API用来部署和管理容器。

1.4 管理节点

1、初始化第一个管理节点

advertise-addr和listen-addr这两个参数注解:

  • 前者用来指定其他节点连接m0时的地址。
  • 后者指定承载swarm流量的IP和端口。
  • 创建管理节点,会在本地新建docker网络。

2、manager节点说明

MANAGER STATUS列

  • Leader 意味着该节点是使得群的所有群管理和编排决策的主要管理器节点。
  • Reachable 意味着节点是管理者节点正在参与Raft共识。如果管理节点不可用,则该节点有资格被选为新的管理节点。
  • Unavailable 意味着节点是不能与其他管理器通信的管理器。如果管理器节点不可用,应该将新的管理器节点加入群集,或者将工作器节点升级为管理器。

AVAILABILITY列

  • Active 意味着调度程序可以将任务分配给节点。
  • Pause 意味着调度程序不会将新任务分配给节点,但现有任务仍在运行。
  • Drain 意味着调度程序不会向节点分配新任务,调度程序关闭所有现有任务并在可用节点上调度它们。

docker01服务器

注意:IP地址选择的是阿里云服务器的私服!!!

[root@guardwhy01 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
44443742f9b7   bridge    bridge    local
5f09756231c5   host      host      local
9d85ae8a4d3d   none      null      local
[root@guardwhy01 ~]# docker swarm init --advertise-addr 172.21.251.249:2377 --listen-addr 172.21.251.249:2377
Swarm initialized: current node (ujswj6ys93qhtji45oxszv4zr) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-1tattfxbp5ahqz7wk1ha7ycfh 172.21.251.249:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

[root@guardwhy01 ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
44443742f9b7   bridge            bridge    local
c372c3473958   docker_gwbridge   bridge    local
5f09756231c5   host              host      local
jh4ohdal24uo   ingress           overlay   swarm
9d85ae8a4d3d   none              null      local
[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
[root@guardwhy01 ~]# 

3、加入新的节点

Docker Swarm的新节点加入是从管理节点(docker01服务器)获取一长串命令,称为join token,任何加入集群只要执行join token即可加入Swarm集群。

docker02服务器

[root@guardwhy02 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
475d6f0e7633   bridge    bridge    local
4212954a0f4f   host      host      local
7fb6fab37bee   none      null      local
[root@guardwhy02 ~]# docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-1tattfxbp5ahqz7wk1ha7ycfh 172.21.251.249:2377
This node joined a swarm as a worker.
[root@guardwhy02 ~]# 

如果有新的work节点需要加入,在m0执行命令docker swarm join-token worker即可得到管理work节点的join token

docker01服务器

[root@guardwhy01 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-1tattfxbp5ahqz7wk1ha7ycfh 172.21.251.249:2377

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
[root@guardwhy01 ~]# 

如果有新的管理节点需要加入,在m0执行命令docker swarm join-token manager即可得到管理manager节点的join token

docker01服务器

[root@guardwhy01 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-aw4p1x4xwul0iw1ma2aid49cg 172.21.251.249:2377
[root@guardwhy01 ~]#

docker03服务器

[root@guardwhy03 ~]# docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-aw4p1x4xwul0iw1ma2aid49cg 172.21.251.249:2377
This node joined a swarm as a manager.
[root@guardwhy03 ~]# 

在manager查看所有节点。

docker01服务器

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Ready     Active         Reachable        20.10.7
[root@guardwhy01 ~]# 

1.5 节点相关操作

1、验证节点

master节点

[root@guardwhy01 ~]# docker info


work节点

[root@guardwhy02 ~]# docker info


2、节点权限提升/降低

manager节点降低为worker节点,在manager节点执行如下命令

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Reachable        20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Ready     Active         Leader           20.10.7
[root@guardwhy01 ~]# docker node demote guardwhy03
Manager guardwhy03 demoted in the swarm.
[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Unknown   Active                          20.10.7
[root@guardwhy01 ~]# 

将worker节点提升为manager节点,在manager节点执行如下命令

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Ready     Active                          20.10.7
[root@guardwhy01 ~]# docker node promote guardwhy02 
Node guardwhy02 promoted to a manager in the swarm.
[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active         Reachable        20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Ready     Active                          20.10.7
[root@guardwhy01 ~]# 

3、节点脱离集群

docker03服务器

docker03服务器中,使用以下命令

[root@guardwhy03 ~]# docker swarm leave
Node left the swarm.
[root@guardwhy03 ~]# 

docker01服务器

docker01服务器中,使用以下命令

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Reachable        20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active         Leader           20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Down      Active                          20.10.7
[root@guardwhy01 ~]# 

4、删除脱离集群的节点

删除节点命令: docker node rm 节点名称|节点ID

[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Reachable        20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active         Leader           20.10.7
25wan9kvxtew5m48hvkng8jr5     guardwhy03   Down      Active                          20.10.7
[root@guardwhy01 ~]# docker node rm guardwhy03
guardwhy03
[root@guardwhy01 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Reachable        20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active         Leader           20.10.7
[root@guardwhy01 ~]# 

manager中重新添加worker节点

[root@guardwhy01 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-1tattfxbp5ahqz7wk1ha7ycfh 172.21.251.249:2377

[root@guardwhy01 ~]#
[root@guardwhy03 ~]# docker swarm join --token SWMTKN-1-2js986t4enexu18fpn5dnticbmx0df9qni5nsfsn6ngykl931s-1tattfxbp5ahqz7wk1ha7ycfh 172.21.251.249:2377
This node joined a swarm as a worker.
[root@guardwhy03 ~]# 

添加成功!!!

5、安装图形界面

docker官方地址: https://hub.docker.com/r/dockersamples/visualizer

拉取基础镜像

注意:要在manager服务器创建容器!!!

docker pull dockersamples/visualizer:latest

运行图形界面镜像

docker run -itd --name visualizer -p 8091:8080 
-e HOST=8.134.122.252 
-e PORT=8080 
-v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer:latest

查看运行结果

打开浏览器,点击链接: http://8.134.122.252:8091/

6、Swarm命令小结

常用命令 具体作用
docker swarm init 初始化一个 swarm 群集
docker swarm join 加入群集作为节点或管理器
docker swarm join-token 管理用于加入群集的令牌
docker swarm leave 离开 swarm 群集
docker swarm unlock 解锁 swarm 群集
docker swarm unlock-key 管理解锁钥匙
docker swarm update 更新 swarm 群集

7、node命令小结

常用命令 具体作用
docker node demote 从 swarm 群集管理器中降级一个或多个节点
docker node inspect 显示一个或多个节点的详细信息
docker node ls 列出 swarm 群集中的节点
docker node promote 将一个或多个节点推入到群集管理器中
docker node ps 列出在一个或多个节点上运行的任务,默认为当前节点。
docker node rm 从 swarm 群集删除一个或多个节点
docker node update 更新一个节点

1.6 Docker service

1、docker service命令小结

常用命令 具体作用
docker service create 创建服务
docker service inspect 显示一个或多个服务的详细信息
docker service logs 获取服务的日志
docker service ls 列出服务
docker service rm 删除一个或多个服务
docker service scale 设置服务的实例数量
docker service update 更新服务
docker service rollback 恢复服务至update之前的配置

2、需求实现


2、集群所有的节点都下载nginx基础镜像

docker pull nginx:1.18.0-alpine
docker pull nginx:1.19.3-alpine

3、在docker01服务器(manager节点)中创建overlay网络。

[root@guardwhy01 data]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
0eb90cd90de7   bridge            bridge    local
c372c3473958   docker_gwbridge   bridge    local
5f09756231c5   host              host      local
jh4ohdal24uo   ingress           overlay   swarm
9d85ae8a4d3d   none              null      local
[root@guardwhy01 data]# docker network create -d overlay nginx-net
yoyo8isxn654fmkeygfsi3nlw
[root@guardwhy01 data]# 

4、创建5个nginx容器的集群

[root@guardwhy01 data]# docker service create --name nginx --network nginx-net -p 80:80 --replicas 5 nginx:1.18.0-alpine 
u0etuzildau4h931nybmjbgtx
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 
[root@guardwhy01 data]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ujswj6ys93qhtji45oxszv4zr *   guardwhy01   Ready     Active         Leader           20.10.7
sq9x6zrg7u2izo4tzmrffbyz1     guardwhy02   Ready     Active                          20.10.7
pu1ykn1mnx0ptbiw7bjwltrq6     guardwhy03   Ready     Active                          20.10.7
[root@guardwhy01 data]# docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                            PORTS                                       NAMES
f42ef1d0c1e5   nginx:1.18.0-alpine               "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes                      80/tcp                                      nginx.4.qc3yxnwk3zpeurfg3cj6kfy3t
d4c2fa9dbab0   nginx:1.18.0-alpine               "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes                      80/tcp                                      nginx.2.d89kask69omz214ivu14fduo4
3d648fc53506   dockersamples/visualizer:latest   "/sbin/tini -- node …"   6 hours ago     Up 4 seconds (health: starting)   0.0.0.0:8091->8080/tcp, :::8091->8080/tcp   visualizer
[root@guardwhy01 data]# 

访问链接: http://8.134.122.252:8091/

5、命令查看服务情况。

[root@guardwhy01 data]# docker service ls
ID             NAME      MODE         REPLICAS   IMAGE                 PORTS
u0etuzildau4   nginx     replicated   5/5        nginx:1.18.0-alpine   *:80->80/tcp
[root@guardwhy01 data]#

注意: docker service ls命令只能在manager节点使用,在worker节点无法查看

6、查看服务器容器情况

[root@guardwhy02 home]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS     NAMES
a77fba3447f0   nginx:1.18.0-alpine   "/docker-entrypoint.…"   14 minutes ago   Up 14 minutes   80/tcp    nginx.3.haruvjy8v68otk1cxdkc4rs90
e13fb38a0602   nginx:1.18.0-alpine   "/docker-entrypoint.…"   14 minutes ago   Up 14 minutes   80/tcp    nginx.1.hwedkhibak90mzvh7jt9oaaau
[root@guardwhy02 home]# 

注意: 在manager或者worker节点都可以执行docker ps命令。

7、manager节点只用于管理集群,不部署服务。

[root@guardwhy01 data]# docker node update --availability drain guardwhy01
guardwhy01
[root@guardwhy01 data]# docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED       STATUS                    PORTS                                       NAMES
3d648fc53506   dockersamples/visualizer:latest   "/sbin/tini -- node …"   6 hours ago   Up 14 minutes (healthy)   0.0.0.0:8091->8080/tcp, :::8091->8080/tcp   visualizer
[root@guardwhy01 data]# 

访问链接: http://8.134.122.252:8091/

8、将服务缩减为3个容器

[root@guardwhy01 data]# docker service scale nginx=3
nginx scaled to 3
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3:   
verify: Service converged 
[root@guardwhy01 data]# 

访问链接: http://8.134.122.252:8091/

9、升级nginx版本

进入其中一个容器查看nginx的版本信息。

[root@guardwhy02 home]# docker images
REPOSITORY   TAG             IMAGE ID       CREATED        SIZE
nginx        1.18.0-alpine   684dbf9f01f3   2 months ago   21.9MB
nginx        1.19.3-alpine   4efb29ff172a   8 months ago   21.8MB
[root@guardwhy02 home]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS     NAMES
a77fba3447f0   nginx:1.18.0-alpine   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   80/tcp  nginx.3.haruvjy8v68otk1cxdkc4rs90
e13fb38a0602   nginx:1.18.0-alpine   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   80/tcp    nginx.1.hwedkhibak90mzvh7jt9oaaau
[root@guardwhy02 home]# docker exec -it e13fb38a0602 sh
/ # nginx -v
nginx version: nginx/1.18.0
nginx version: nginx/1.18.0
/ # exit
[root@guardwhy02 home]# 

更新镜像

注意:更新镜像只能在manager节点使用。

[root@guardwhy01 data]# docker service update --image nginx:1.19.3-alpine nginx
nginx
overall progress: 3 out of 3 tasks 
1/3: running   [==================================================>] 
2/3: running   [==================================================>] 
3/3: running   [==================================================>] 
verify: Service converged 
[root@guardwhy01 data]# 

更新镜像以后,查看结果!!!

添加或者更新一个对外端口

[root@guardwhy01 data]# docker service update --publish-add 8087:80 nginx
nginx
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 
[root@guardwhy01 data]# 

访问链接: http://8.134.122.252:8087/

10、删除服务

[root@guardwhy01 data]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
0eb90cd90de7   bridge            bridge    local
c372c3473958   docker_gwbridge   bridge    local
5f09756231c5   host              host      local
jh4ohdal24uo   ingress           overlay   swarm
yoyo8isxn654   nginx-net         overlay   swarm
9d85ae8a4d3d   none              null      local
[root@guardwhy01 data]# docker service rm nginx
nginx
[root@guardwhy01 data]# docker network rm nginx-net
nginx-net
[root@guardwhy01 data]# docker service ls
ID        NAME      MODE      REPLICAS   IMAGE     PORTS
[root@guardwhy01 data]# 

1.7 Docker stack

1、docker stack命令小结

常用命令 具体作用
docker stack deploy 部署新的堆栈或更新现有堆栈
docker stack ls 列出现有堆栈
docker stack ps 列出堆栈中的任务
docker stack rm 删除一个或多个堆栈
docker stack services 列出堆栈中的服务

2、在manager节点中创建docker-compose.yml文件

version: '3'
services:
  nginx-web:
    image: nginx:1.19.3-alpine
    container_name: nginx
    networks:
     - nginx-net
    restart: always
    ports:
      - 80:80
    deploy:
      replicas: 5

networks:
  nginx-net:
    driver: overlay

3、运行nginx

[root@guardwhy01 data]# docker stack deploy nginx-stack -c docker-compose.yml
Ignoring unsupported options: restart

Ignoring deprecated options:

container_name: Setting the container name is not supported.

Creating service nginx-stack_nginx-web
[root@guardwhy01 data]# docker service ls
ID             NAME                    MODE         REPLICAS   IMAGE                 PORTS
i8nabdgwztf0   nginx-stack_nginx-web   replicated   5/5        nginx:1.19.3-alpine   *:80->80/tcp
[root@guardwhy01 data]# 

访问链接: http://8.134.122.252:8091/

4、查看NAME中的服务名为:nginx-stack_nginx-web所有容器

[root@guardwhy01 data]# docker service ps nginx-stack_nginx-web
ID             NAME                      IMAGE                 NODE         DESIRED STATE   CURRENT STATE            ERROR     PORTS
j91t0720gitm   nginx-stack_nginx-web.1   nginx:1.19.3-alpine   guardwhy02   Running         Running 11 minutes ago             
5qooi8nxt1xb   nginx-stack_nginx-web.2   nginx:1.19.3-alpine   guardwhy02   Running         Running 11 minutes ago             
r8cdsibuwsec   nginx-stack_nginx-web.3   nginx:1.19.3-alpine   guardwhy03   Running         Running 11 minutes ago             
ze7d0p8m8wx6   nginx-stack_nginx-web.4   nginx:1.19.3-alpine   guardwhy02   Running         Running 11 minutes ago             
itzy9fa87v50   nginx-stack_nginx-web.5   nginx:1.19.3-alpine   guardwhy03   Running         Running 11 minutes ago             
[root@guardwhy01 data]# 

5、删除stack服务,执行以下命令

[root@guardwhy01 data]# docker stack rm nginx-stack
Removing service nginx-stack_nginx-web
Removing network nginx-stack_nginx-net
[root@guardwhy01 data]# 


6、小结

  • networks中也可以不指定driver:overlay,因为docker swarm默认网络类型是overlay。
  • 整个networks都可以不用配置,stack部署时会默认创建网络。定义网络在docker stack deploy时,会先默认创建一个网络。
  • 注意一定要把镜像先拉取到本地然后再执行。

1.8 Stack和Compose区别

  • Docker stack会忽略了构建指令,无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的。 所以docker-compose更适合于开发场景。
  • Docker Compose是一个Python项目,它使用Docker API规范来操作容器。所以需要安装Docker -compose,以便与Docker一起在计算机上使用。
  • Docker Stack功能包含在Docker引擎中,不需要安装额外的包来使用它。docker stacks 只是swarm mode的一部分。
  • Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理。
  • docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。对于大多数用户来说,切换到使用docker stack既不困难,也不需要太多的开销。如果是Docker新手,或正在选择用于新项目的技术,请使用docker stack
原文地址:https://www.cnblogs.com/Guard9/p/14906602.html