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 的网络


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

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

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

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

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

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

 

总结

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

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

猜你喜欢

转载自www.cnblogs.com/xuanmanstein/p/11605071.html