我怎样才能得到“docker – 组成规模”使用最新的形象创build的任何额外的实例?
在我的项目中,我有一些互相依赖的微服务。 我正在使用Docker Compose将所有内容按正确顺序排列。
在开发过程中,当我为容器编写一些新代码时,容器需要重新启动,以便可以尝试新代码。 到目前为止,我只是在重新启动整个事情,因此:
docker-compose down && docker-compose up -d
这样可以正常工作,但是把所有的东西都放下来需要花费20秒,这对于现场环境来说太长了。 因此,我正在研究各种策略,以确保微型服务可以单独重新启动而不会中断。
我的第一个方法,几乎可行,是扩大服务重启,从一个实例到两个。 然后,我以编程方式重置反向代理(Traefik),以指向新的实例,然后当这很开心,我docker stop
在旧的。
由于我使用了Compose 1.8.0,因此我的缩放命令是旧的。 它看起来像这样:
docker-compose scale missive-storage-backend=2
唯一的问题是,如果有一个新的图像,Docker撰写不使用它 – 它固执地使用与已经运行的实例相同的散列。 我已经检查了docker-compose scale --help
,没有任何内容涉及强制使用新的图像。
现在我可以使用一个普通的docker run
,但是我不得不复制我在docker-compose.yml
为这个服务设置的所有选项,而且我不知道是否在Compose文件之外运行应该被理解为是该Compose应用程序的一部分(例如docker-compose down
尽pipe已经手动启动,它是否会停靠在docker-compose down
)。
Docker Compose的后续版本也可能在scale函数中有更多的选项( 反正它已经合并了 )。
什么是最简单的方法来获得这个function?
(另外:我很欣赏有很多的编排工具可以轻松地重新启动,还有其他的魔法,当我有时间的时候,我一定会探索那个无底洞。现在,我觉得编写几个脚本来完成一些部署任务是更快的胜利。)
我已经解决了这个问题 首先,我尝试升级到Compose 1.9,但似乎没有提供我需要的更改。 然后我碰到了1.13,当时scale
作为一个单独的命令被弃用,并且作为up
命令的切换出现。
作为一个testing,我有一个名为missive-storage
的图像,我添加了一个虚拟变化到Dockerfile中,所以docker docker ps
d4ebdee0f3e2
正在运行的容器中的图像名称改为d4ebdee0f3e2
(因为d4ebdee0f3e2
missive-storage:latest
已经改变)。
ps
行看起来像这样:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 45b8023f6ef1 d4ebdee0f3e2 "/usr/local/bin/du..." 4 minutes ago Up 4 minutes app_missive-storage-backend_1
然后我发出这个命令( missive-storage-backend
是图像missive-storage
的DC服务名称):
docker-compose up -d --no-recreate --scale missive-storage-backend=2
这导致这些容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0bd6577f281a missive-storage "/usr/local/bin/du..." 2 seconds ago Up 2 seconds app_missive-storage-backend_2 45b8023f6ef1 d4ebdee0f3e2 "/usr/local/bin/du..." 4 minutes ago Up 4 minutes app_missive-storage-backend_1
正如你所看到的,这给了我两个正在运行的容器,一个基于旧图像,一个基于新图像。 从这里我可以通过向前端代理发送configuration更改来redirectstream量,然后stop
旧容器。
请注意,– --no-recreate
非常重要 – 如果没有它,Docker Compose似乎很容易重新启动一切,从而击败了练习的对象。
- 在Mac中启用Docker远程API(使用Docker快速入门terminal)
- Docker(Kubernetes)中Java应用程序的configuration
- 在docker alpine linux base image上设置glibc是否有最佳做法?
- docker错误:x509:由未知权威签名的证书
- Docker – replaceMac上的dockerd
- 我试图通过Docker与Clojure应用程序连接到MongoDB
- docker-compose构build失败/ bin / sh:apt-get:not found
- 限制docker容器访问主机局域网,但不限于互联网
- Docker:尝试连接到本地CircleCI构build的Docker Daemon时拒绝了权限