浅析Docker Compose和Docker Stack区别以及Docker Stack部署web集群流程

一、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
原文地址:https://www.cnblogs.com/goloving/p/14979522.html