繁体   English   中英

docker 组合拉取最新镜像

[英]docker compose pull newest image

我有一些微服务。 Jenkins 构建这些项目,创建 docker 图像并将它们发布到工件。 我有另一个使用这些 docker 图像的自动化测试项目。 我们有一个 docker-compose 文件,其中包含所有微服务映像的所有配置。

以下是样品 docker-compose

version: "1.0"
services:
  my-service:
    image: .../my-service:1.0.0-SNAPSHOT-1
    container_name: 'my-service'
    restart: always
    volumes:
      ...
    ports:
      ...
  ...

所有这些都工作正常。 现在要更新图像,我必须手动更改 docker-compose 中的图像标签 (1.0.0-SNAPSHOT-2)。

这是一个问题,因为这涉及到人为干预。 有没有什么方法可以拉取最新的 docker 映像而不改变 docker-compose?

注意 - 我无法创建带有最新标签的图像。 在工件中发布具有相同名称的图像时出现问题(未经授权:客户端没有清单的权限:没有足够的权限来删除/覆盖工件)。

那么实际上您可以做的是,在 cli 命令 (envsubst) 中使用环境变量替换。 让我解释一个场景作为例子。

首先在 docker-compose.yaml 中定义一个环境变量,作为容器的标签

version: "3"
  services:
    my-service:
      image: .../my-service:$TAG
      container_name: 'my-service'
      restart: always
      volumes:
        ...
      ports:
        ...
    ...

其次,使用 cli 命令(或终端),您可以使用版本定义环境变量。 这部分很重要,因为在这里你将你的版本标签添加到容器中(你可以执行 bash 命令来提取一些 id,或者最后的 git 提交或者你想要作为容器标签执行的任何东西,我给你一些想法)

export TAG=1.0.0-SNAPSHOT-1
export TAG="$(bash /path/to/script/tag.sh)"
export TAG="$(git log --format="%H" -n 1)"

第三部分和最后一个是执行“envsubst”,然后执行 docker-compose.yaml 来部署您的容器。 注意 pipe |,对于执行非常重要。

envsubst < docker-compose.yaml | docker-compose up -d

链接到envsubst

我使用这种格式在kubernetes中部署标记容器,但思路必须与docker compose相同。

envsubst < deployment.yaml | kubectl apply -f -

并将 docker-compose.yaml 中的版本更改为 3。 祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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