繁体   English   中英

Docker 构图升级

[英]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:commit2service: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

以及使用sedawk脚本,您可以将{{ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM