• docker stack /swarm 替代 docker-compose 进行部署


    之前一直用docker-compose开发了几个单例的service, 今天开始压力测试, 结果发现postgres的CPU负载很重, 就想设置cpus 结果发现docker-compose V3之后 只能写在deploy字段里, 但是docker-compose up  却不支持 deploy 

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

    说只能用swarm 模式.  这等于说V3的 docker compose  不能直接设定这个?

    现在把swarm启动搞定了. 大概明白docker的意思了:

    编辑同一份docker-compose.yml, 但是compose 和 swarm/stack的分工是这样的:

     docker-compose   用于dev   支持build restart  但是不支持deploy,  

    swarm/stack      用于 prod  支持 deply的各种设置,包括分配cpu和内存, 但是创建容器只支持从image,不支持build.

    假设已经用docker-compose基本开发完毕. 那么准备工作是这样:

    一 docker-compose.yml

    swarm模式, 每个serive都必须有image,不能只有build.

    最简单的方法,就是先docker-compose up --build 启动运行无误

    然后docker image ls 查看创建出的镜像名字

    抄到每个Service下面,

    然后,别忘了增加deploy字段, 尤其是mode, 对单例, 设置为global

    yml形如:

    version: '3.7

    services: gateway:
    #nodejs + socket.io server image: lh2-runtime_gateway build: ./machines/lh2-gateway
    ...下略
        deploy:
          mode: global
     

    一 配置swarm

    在docker-compose.yml的路径下(就是原来运行docker-compose的路径)

    docker swarm init

    具体细节略过了, 简单说,我们的manager和worker都是这同一台机器的话, 这一句就够了, 不用join别的了

    二.  stack

    docker stack deploy -c docker-compose.yml stack-demo

    使用 docker-compose.yml 创建 stack (也就是一堆service), 

    这样服务其实已经创建好了.

    但发现其实服务并没有在线. 检查一下

    replicas 是服务copy的数量, 每个最大1一个,但是当前活动都是0,  全都没启动起来

    继续查具体1个service, 用 id

    发现不断报错, ."Pool overlaps with other one …"

    这是和networks有关,根据

    https://blog.csdn.net/u010483897/article/details/88017387

    要删除 docker-compose.yml 创建的networks 否则一会服务因为端口相同都rejected  

    查看一下docker 的网络

    docker network ls


    最后一个的scope 是swarm , driver 时 overlay的 是刚刚创建的,需要保留的

    那么前面 bridge  local  那个,是需要删除的

    删除之后,再查看刚才那个服务, 已经提示启动成功, 没有错误了

    显示 数量都是 1/1  因为全是global

    此时已经可以使用服务了.

    docker stats 可以查看到服务全在运行,和用docker-compse up 时 一样

     

    总结

    基本无坑,比想象的容易. 吃完晚饭2个小时基本从完全不懂到部署成功了.  也不用太去管什么叫swarm ,什么 叫 stack ,先运行起来再说.

    感觉还是部署和开发环境  完全分开在不同机器上比较好.  不然, 用 docker-compose build 的时候,还是要重新删除,创建一遍networks. 但是穷人没办法呀.  也将就了.

    切换会docker-compose 的时候 找不到networks  https://stackoverflow.com/questions/53347951/docker-network-not-found

    docker-compose up --force-recreate

    然而, 用swarm 部署后的效果,感觉和docker-comppse 并没有什么区别... 

  • 相关阅读:
    隐藏QQ全部图标,隐藏QQ全部信息
    发放腾讯微博邀请,先到先得、
    关于“5005: 优化字节代码时发生未知错误。”的处理办法
    端口
    xmldocument
    MasterPage
    asp.net ajax
    mysqladmin 设置用户名初始密码报错you need the SUPER privilege for this operation
    实践SSH通道链接国外服务器访问受限网站
    转载 实践与分享:Windows 7怎么获取TrustedInstaller权限【图文教程】
  • 原文地址:https://www.cnblogs.com/xuanmanstein/p/11605071.html
Copyright © 2020-2023  润新知