Docker学习—Stack

前言:

 前一篇了解Docker使用Swarm集群部署方式,并创建服务到Swarm集群中;如果在集群部署过程中存在大量服务部署、编排那么该如何处理呢?

 那么就需要了解Docker Stack了。

1、Docker Stack是什么?

 Docker在进行多服务部署和管理时通常会使用Docker Stack来解决大规模部署管理问题,Docker引擎在1.12 版本集成了Docker Swarm, 内置新的容器编排工具docker stack,通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理。

 从体系结构上来讲,Stack 位于 Docker 应用层级的最顶端。Stack 基于服务进行构建,而服务又基于容器,如下图所示。

 

2、Docker Stack相关命令

 命令比较简单且重点命令已经标记

命令 描述
docker stack deploy

部署新stack或更新现有stack

docker stack ls

显示stack列表

docker stack ps

列出stack中的任务

docker stack rm

移除一个或多个stack

docker stack services

列出stack中的服务 

3、Docker Stack应用示例

 1、将本地创建镜像推送到dockerhub:

   注意:在推送本地编译镜像时提示:denied: requested access to the resource is denied

  解决办法:为镜像打标 docker tag 镜像名 dockerhub用户名/镜像名

docker tag czidentityserver cwsheng/czidentityserver

  2、添加一个docker-compose.yml文件

version: "3.8"

services:
  czids:
    image: cwsheng/czidentityserver
    ports: 
      - "8090:8090"
    networks: 
      - backend

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

networks:
  backend:

  3、执行命令  

docker stack deploy -c docker-compose.yml stackdemo

 4、查看服务  

docker service ps mygoweb

 5、可以看出docker stack和docker compose使用非常类似:

  都是使用yml定义容器编排,且都能操作yml文件中定义的:services、volumes、networks等资源

docker-compose -f docker-compose up

docker stack deploy -c docker-compose.yml stackdemo

  那么他们有什么不同呢

Docker Stack与Docker Compose的区别

1、来源:docker-compose是一个Python项目,作用在Docker引擎的顶层,必须单独安装docker-compose工具包才能将其与Docker一起使用;docker stack 来源docker 引擎原生支持,不许要额外安装

2、compose-file版本支持docker stack 只能支持 version3 以上版本;docker compose支持所有版本

3、docker stack 不支持 compose file中的“build”指令,docker compose 不支持 deploy(https://docs.docker.com/compose/compose-file/#deploy)

4、docker stack 是swarm mode的一部分, 即使是单机使用, 也需要一个 swarm 节点

5、docker stack 强化了service的概念:服务可理解为发布到生产环境时某组容器的预期状态 ,以及强化了( 复制集、 容器重启策略、回滚策略、服务更新策略 )等生产特性

总结 

  1、docker-compose 更像是被定义为单机容器编排工具

  2、docker stack为适用于生产环境的编排工具

 docker-compose、docker stack工具命令都可以使用version3 编写的docker-compose.yml 文件上,版本3之前的docker-compose.yml 文件可继续使用docker-compose工具,如果你仅需要一个能操作多个容器的工具,依旧可以使用docker-compose工具。

 docker stack几乎能做docker-compose所有的事情 (生产部署docker stack表现还更好),如果打算使用docker swarm集群编排,可迁移到docker stack。

参考:

  https://docs.docker.com/compose/compose-file/ 

原文地址:https://www.cnblogs.com/cwsheng/p/14058171.html