我有多个微服务,我使用docker-compose进行开发部署。当微服务代码库中有一些更改时,我会触发ci作业来重新部署它们。我有下面的脚本来完成此操作。但每次我都必须从头开始构建所有映像,然后运行它们。完成所有这些操作后,我有anonymous
图像。所以我使用最后一个脚本来删除它们。你有什么建议让这个过程更实用?有没有什么方法可以更新现有的图像而不删除它与新的变化?
- docker-compose build
- docker-compose down
- docker-compose up -d --force-recreate
- docker rmi $(docker images -f "dangling=true" -q) -f
其他信息:我正在使用gitlab-ci
7条答案
按热度按时间5q4ezhmt1#
Docker容器被设计为是短暂的。要更新一个现有的容器,您可以删除旧的容器并启动一个新的容器。因此,您所遵循的过程是正确的。
可以将这些命令简化为以下几个命令:
wqsoz72f2#
您可以使用以下方法更新它:
现在您的映像已更新。如果您运行的是以前版本的container,则应重新启动它以使用更新后的映像:
up
命令在映像或配置更改时自动重新创建容器。guykilcj3#
我更喜欢确保在用新映像更新容器之前下载所有映像,以最小化处于中间状态的时间,或者更糟糕的是,在映像下载失败的情况下,处于中间状态的时间。
1.我拉最新的图像:
docker-compose pull
1.然后我重新启动容器:
docker-compose up -d --remove-orphans
1.(可选)删除过时的映像:
docker image prune
myzjeezk4#
然后
你不需要“down”“docker-compose up -d”命令只会重新创建一个更改过的
ddhy6vgd5#
使用docker-compose版本3,您可以添加标签到您的图像,并根据您的逻辑进行清理:
它可以帮助您避免匿名图像清理
ohfgkhjo6#
也有一个脚本,使用它可以一次更新多个docker-compose堆栈。
它名为compose-update,可在以下链接中找到:
https://github.com/FrederikRogalski/compose-update
合成更新停靠合成映像更新程序
这个python脚本自动更新一个或多个docker-compose堆栈的图像。
如果提供了多个Docker-Composer目录,则脚本将并行更新它们。
演示
用法
安装
然后将“update-compose”文件添加到路径中。
rt4zxlrg7#
我已经注意到上面的答案,但我仍然坚持使用下面的命令来确保一切都是正确的:
docker-compose pull
docker-compose down
docker-compose up -d