Docker compose映像升级
我有一个docker compose映像正在运行:Docker compose映像升级,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有一个docker compose映像正在运行: version: '2' services: db: image: postgres:commit1 service: image: service:commit1 ports: - "3000:3000" depends_on: - db 该映像有一个git的commit id标记。如果代码中有任何更改,CI/CD管道将运行并使用最新的提交id更新映像 现在
version: '2'
services:
db:
image: postgres:commit1
service:
image: service:commit1
ports:
- "3000:3000"
depends_on:
- db
该映像有一个git的commit id标记。如果代码中有任何更改,CI/CD管道将运行并使用最新的提交id更新映像
现在让我们假设我有如下图像:
postgres:commit2
和服务:commit2
如果容器正在使用compose文件中的commit1运行,那么更新图像的最佳过程是什么
我是否需要在compose中手动更新图像,然后:
docker-compose restart
然后手动移除其他容器
这是最好的方法吗?一种方法是模板化您的compose文件,并使用单独的CI/CD步骤在每个构建上生成一个带有新图像标记的新文件 例如-
// docker-compose.yml.template
version: '2'
services:
db:
image: postgres:{{ COMMIT_ID }}
service:
image: service:{{ COMMIT_ID }}
ports:
- "3000:3000"
depends_on:
- db
使用sed
或awk
脚本,您可以用最新的提交ID替换{{COMMIT\u ID}
,并生成新文件
// docker-compose.yml
version: '2'
services:
db:
image: postgres:commit2
service:
image: service:commit2
ports:
- "3000:3000"
depends_on:
- db
然后,您最终可以使用docker compose pull和docker compose up-d来提取和使用最新的图像一种方法是模板化您的合成文件,并使用单独的CI/CD步骤在每个构建上生成一个新文件,其中包含新的图像标记 例如-
// docker-compose.yml.template
version: '2'
services:
db:
image: postgres:{{ COMMIT_ID }}
service:
image: service:{{ COMMIT_ID }}
ports:
- "3000:3000"
depends_on:
- db
使用sed
或awk
脚本,您可以用最新的提交ID替换{{COMMIT\u ID}
,并生成新文件
// docker-compose.yml
version: '2'
services:
db:
image: postgres:commit2
service:
image: service:commit2
ports:
- "3000:3000"
depends_on:
- db
然后,您最终可以使用docker compose pull和docker compose up-d来提取和使用最新的图像我假设您正在寻找一些选项来使用docker compose进行滚动更新,并且您的服务支持多个实例。这可以通过以下方式实现:首先更改docker compose文件中的图像id,您可以使用CI/CD工具使用更新的提交哈希创建新的docker compose文件 然后,您可以使用下面的命令在服务后面添加新容器(带有新图像)
docker-compose up --scale db=1 --scale service=1 --no-recreate
然后下一步是删除旧容器
docker rm old-container # service
最后一步是将服务扩展到所需的实例数
这是我能想到的最适合docker创作的作品。如果您使用的是docker swarm或任何其他系统,它将是开箱即用的功能:)我假设您正在寻找一些选项来使用docker compose进行滚动更新,并且您的服务支持多个实例。这可以通过以下方式实现:首先更改docker compose文件中的图像id,您可以使用CI/CD工具使用更新的提交哈希创建新的docker compose文件 然后,您可以使用下面的命令在服务后面添加新容器(带有新图像)
docker-compose up --scale db=1 --scale service=1 --no-recreate
然后下一步是删除旧容器
docker rm old-container # service
最后一步是将服务扩展到所需的实例数
这是我能想到的最适合docker创作的作品。如果您使用的是docker swarm或任何其他系统,它将是开箱即用的功能:)