之前一直用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 并没有什么区别...

docker stack /swarm 替代 docker-compose 进行部署的更多相关文章

  1. docker kubernetes Swarm容器编排k8s CICD部署

    1docker版本 docker 17.09 https://docs.docker.com/ appledeAir:~ apple$ docker version Client: Docker En ...

  2. docker探索-swarm搭建docker集群(七)

    前言 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令,docker s ...

  3. Docker - 通过swarm 管理 docker service

    创建一个 Docker service $ docker service create --replicas 1 --name myhelloworld alpine ping docker.com ...

  4. Dockerfile & Docker Swarm & Docker Stack & Docker Compose

    Dockerfile 通俗地讲,它是为了指导单个镜像从无到有的构建过程.如果你镜像是从Docker registry上面拉下来的,那就用不到这个文件:如果你是自己的应用,想打包成镜像,那就需要这个文件 ...

  5. 【翻译】Docker Compose 与Docker Stack的不同

    翻译原文 Docker引擎在1.12 版本集成了Docker Swarm,  带来了一些新工具. 现在可以无需安装 Docker Compose, 就可以利用docker-compose.yml 文件 ...

  6. 小白学Docker之Swarm

    承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started 系列文章: 小白学Docker之基础篇 小白学Docker之Co ...

  7. DOCKER 学习笔记8 Docker Swarm 集群搭建

    前言 在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的.这一节,我们将继续学习 Docker ...

  8. Docker - 使用Swarm和compose部署服务(containers)

    前言 在之前使用Docker的过程中,一直是用 Docker run 命令单独启动container后再加入Overlay网络的方式实现部署工作的. 这种方式看似直接,但是随着服务所包含的contai ...

  9. Docker Swarm Mode 学习笔记 (部署服务)

    使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点上执行. 新建服务 docker service create --replicas 3 -p 80:80 ...

随机推荐

  1. Make It One CodeForces - 1043F (数论,最短路,好题)

    大意: 给定序列$a$, 求最小子集, 使得gcd为1. 对于数$x$, 素因子多少次幂是无关紧要的, 这样就可以用一个二进制数来表示. $x$取$gcd$后的二进制状态最多$2^7$, 可以暴力枚举 ...

  2. 不同主机的docker内容器通过直接路由的方式进行通信

    引用文章链接:https://www.cnblogs.com/xiao987334176/p/10049844.html 六.操作总结 修改不同主机上docker默认的网络参数 主机1:192.168 ...

  3. 7.bash作业控制

    7.作业控制本节讨论作业控制是什么.它怎么工作.以及 Bash 里面怎么使用这些功能7.1 作业控制基础作业控制是指有选择的停止(暂停)并在后来继续(恢复)执行某个进程的能力.通常,用户通过 Bash ...

  4. dev listbox使用

    private void Init() { List<Funcation> data = new List<Funcation>(); data.Add(new Funcati ...

  5. c#获取桌面路径和bin文件的路径

    string path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory): 生成的运行bin文件下的路径: ...

  6. js判断浏览器内核如果是ie弹出提示非ie不进行任何操作

    如上做一个弹出框针对ie兼容 // 获取IE版本 function IEVersion() { // 取得浏览器的userAgent字符串 var userAgent = navigator.user ...

  7. Nginx作为静态资源web服务之文件读取

    Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...

  8. C# 获取当前执行DLL 所在路径

    有的时候,当前执行的DLL 和启动的EXE 所在路径并不一致,这时我们想要获得当前执行DLL 所在路径可以使用下面的方法. // Summary: // Gets the path or UNC lo ...

  9. ubuntu安装软件apt-get

    一. apt-get用法 apt 0.8.16~exp12ubuntu10.26 for i386 compiled on Aug  5 2015 19:06:21Usage: apt-get [op ...

  10. 用Python+Aria2写一个自动选择最优下载方式的E站爬虫

    前言 E站爬虫在网上已经有很多了,但多数都只能以图片为单位下载,且偶尔会遇到图片加载失败的情况:熟悉E站的朋友们应该知道,E站许多资源都是有提供BT种子的,而且通常打包的是比默认看图模式更高清的文件: ...