浅析Docker Stack常用命令、Docker Compose和Docker Stack区别及Docker Stack部署web集群流程

一、Docker Stack 常用命令

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

二、Docker Compose和Docker Stack区别

1、Docker stack会忽略了“构建”指令,您无法使用stack命令构建新镜像,它是需要镜像是预先已经构建好的,所以docker-compose更适合于开发场景。

2、还有一些compose-file规范被docker-compose或stack命令忽略。

3、Docker Compose是一个Python项目。 最初,有一个名为 fig 的Python项目,用于解析 fig.yml 文件,你猜对了 - 堆栈的Docker容器。每个人都喜欢它,特别是Docker的追随者,最后它慢慢的融入了docker 产品中,但它仍然在Python中,运行在Docker引擎之上。

  在内部,它使用 Docker API 规范来操作容器,所以您仍然需要分别安装Docker-compose,以便与Docker一起在您的计算机上使用。

4、Docker Stack功能包含在Docker引擎中,你不需要安装额外的包来使用它,docker stacks 只是 swarm mode 的一部分,它支持相同类型的 compose 文件,但实际的处理是发生在 Docker Engine(docker引擎)内部的Go代码中。

  在使用堆栈命令之前,还必须创建一个单机版的“swarm”,但这并不是什么大问题。

5、如果你的docker-compose.yml 是基于第二版写的(在docker-compose.yml中指定version: "2"),那么Docker stack是不支持的。

  你必须使用最新版本,也就是version版本至少为3,然而Docker Compose对版本为 2 和 3 的文件仍然可以处理。

6、总结

  docker-compose 和新命令 docker stack commands 都可以处理版本号为 3 的 docker-compose.yml 文件。对于版本号为2的文件,你不得不继续使用docker-compose,如果你想升级,也不需要做太多的工作。

  由于 docker stack 把 docker compose 的所有工作都做完了,因此可以肯定 docker stack 将占主导地位,这意味着 docker-compose 可能会被弃用,最终不会被支持。然而,对于大多数用户来说,切换到使用 docker stack 既不困难,也不需要太多的开销,您可以在将docker compose从版本2升级到版本3的同时轻松完成。如果您是Docker新手,或正在选择用于新项目的技术 - 无论如何,请坚持使用docker stack deploy。

三、Docker Stack部署web集群流程

1、环境:两台centos7的虚拟机或服务器,一个作为主服务器,一个作为服务器2

2、设置Docker Swarm:

  在主服务器上开启swarm
docker swarm init

  执行命令后会给出加入这个swarm的命令

  然后在服务器2上执行上述这个命令加入swarm

  这样我们就建好了swarm,两台主机现在建立好了关系。

3、web服务

4、dockerfile文件用于生成镜像

5、镜像提交到镜像仓库

  因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的镜像仓库上去。

// 使用tag重新命名
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0

// 推送
docker push lpxxn.com:5000/goweb:1.0

6、docker-compose 文件

  接下来创建docker-compose.yml文件:image 就是我们上面创建好的镜像。运行5个应用程序,docker 会自己做负载,端口映射8111,失败时自动重启服务,并且创建了自己的网络,当有多个server服务时这个非常有用。

version: "3"
services:
  web:
    image: lpxxn.com:5000/goweb:1.0
    deploy:
      replicas: 5
      resources:
        limits: 
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "8111:8000"
    networks: 
      - gowebnet
networks: 
  gowebnet:

7、部署应用:到了最后的阶段了,部属一样很简单,执行deploy命令

docker stack deploy -c docker-compose.yml mygoweb

  查看启动的服务

docker service ps mygoweb

参考文章:李鹏 - https://www.cnblogs.com/li-peng/p/8144372.html
posted @ 2021-07-06 23:26  古兰精  阅读(2043)  评论(0编辑  收藏  举报