[英]Docker compose image upgrade
我有一个 docker-compose 图像正在运行:
version: '2'
services:
db:
image: postgres:commit1
service:
image: service:commit1
ports:
- "3000:3000"
depends_on:
- db
该图像的提交 ID 为 git 的标签。 如果代码发生任何变化,CI/CD 管道将运行并使用最新的提交 ID 更新映像。
现在假设我有图像: postgres:commit2
和service:commit2
。
鉴于容器正在使用撰写文件中的 commit1 运行,更新图像的最佳程序是什么?
我是否需要在撰写中手动更新图像,然后:
docker-compose restart
并手动删除其他容器?
这是最好的方法吗?
一种方法是将您的撰写文件模板化,并有一个单独的 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
脚本,您可以将{{ COMMIT_ID }}
替换为最新的提交 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 文件并更新提交 hash。
然后您可以使用以下命令在服务后面添加新容器(带有新的新图像)。
docker-compose up --scale db=1 --scale service=1 --no-recreate
然后下一步是删除旧容器
docker rm old-container # service
然后最后一步是将服务扩展到您想要的实例数量。
这是我能想到的最好的 docker-compose。 如果您使用的是 docker swarm 或任何其他系统,它将是开箱即用的功能:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.