如何使用docker-compose更新现有图像?

dhxwm5r4  于 2022-11-28  发布在  Docker
关注(0)|答案(7)|浏览(227)

我有多个微服务,我使用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

5q4ezhmt

5q4ezhmt1#

Docker容器被设计为是短暂的。要更新一个现有的容器,您可以删除旧的容器并启动一个新的容器。因此,您所遵循的过程是正确的。
可以将这些命令简化为以下几个命令:

docker-compose up --force-recreate --build -d
docker image prune -f
wqsoz72f

wqsoz72f2#

您可以使用以下方法更新它:

docker-compose pull

现在您的映像已更新。如果您运行的是以前版本的container,则应重新启动它以使用更新后的映像:

docker-compose up --detach

up命令在映像或配置更改时自动重新创建容器。

guykilcj

guykilcj3#

我更喜欢确保在用新映像更新容器之前下载所有映像,以最小化处于中间状态的时间,或者更糟糕的是,在映像下载失败的情况下,处于中间状态的时间。
1.我拉最新的图像:
docker-compose pull
1.然后我重新启动容器:
docker-compose up -d --remove-orphans
1.(可选)删除过时的映像:
docker image prune

myzjeezk

myzjeezk4#

docker-compose pull

然后

docker-compose up -d

你不需要“down”“docker-compose up -d”命令只会重新创建一个更改过的

ddhy6vgd

ddhy6vgd5#

使用docker-compose版本3,您可以添加标签到您的图像,并根据您的逻辑进行清理:

build: ./dir
image: yourapp:tag

它可以帮助您避免匿名图像清理

ohfgkhjo

ohfgkhjo6#

也有一个脚本,使用它可以一次更新多个docker-compose堆栈。
它名为compose-update,可在以下链接中找到:
https://github.com/FrederikRogalski/compose-update

合成更新停靠合成映像更新程序

这个python脚本自动更新一个或多个docker-compose堆栈的图像。
如果提供了多个Docker-Composer目录,则脚本将并行更新它们。
演示

用法

Usage: compose-update [OPTIONS] [UPDATE_DIRS]...

  Update docker-compose images automatically.

  Takes one or more directorys as input and searches for a
  compose file in one of the following forms:
  "compose.yaml", "compose.yml", "docker-compose.yaml",
  "docker-compose.yml"

Options:
  --prune / --no-prune  Prune docker images after update
                        process if set
  --help                Show this message and exit.

安装

git clone https://github.com/FrederikRogalski/compose-update.git
cd compose-updater
chmod +x update-compose

然后将“update-compose”文件添加到路径中。

rt4zxlrg

rt4zxlrg7#

我已经注意到上面的答案,但我仍然坚持使用下面的命令来确保一切都是正确的:

  1. docker-compose pull
  2. docker-compose down
  3. docker-compose up -d

相关问题