zoukankan      html  css  js  c++  java
  • 浅析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
  • 相关阅读:
    linux 端口被占用
    vue项目刷新当前页面
    SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别
    mybatis模糊查询去除特殊符号%(百分号)和_(下划线)
    SpringMVC 五种注解参数绑定
    导出数据到Excel--多sheet
    POI 导出工具 实例
    Java 数组转换成字符串 添加逗号 类似 js array的join
    SpringBoot常用注解总结
    Java类的主动使用和被动使用-面试题
  • 原文地址:https://www.cnblogs.com/goloving/p/14979522.html
Copyright © 2011-2022 走看看