繁体   English   中英

通过重复使用相同的标签来重建 docker 图像?

[英]Rebuild docker image by reusing the same tag?

我已经解决了论坛上发布的多个问题,但没有明确我的要求。

在每次成功的 CI 构建之后,我正在构建一个 docker 映像,对于每个成功的构建, Dockerfile几乎不会有 1 到 2 行更改。

Docker Build Command:
     $(docker_registry)/$(Build.Repository.Name):azul
Docker Push Command
      $(docker_registry)/$(Build.Repository.Name):azul

我想用最新的(来自最新的 CI 构建更改)覆盖当前的 docker 图像,但保留相同的标签 - azul docker 支持这个吗?

是的,docker 支持它。 您执行的每一行都会在图像中产生一个新层,其中包含与前一层相比的更改。 修改Dockerfile后,将创建新层并重复使用相同的先前层。

如果要清理构建没有缓存层的整个图像,可以使用—no-cache参数。

从机械上讲,这是可行的。 新图像将用该名称替换旧图像。 旧映像仍将实际存在于构建系统中,但如果您查看docker images output 它的名称会显示<none> docker system prune这样的命令可以清理这些。

这种方法的问题在于消费者端。 如果我docker run registry.example.com/image:azul , Docker 将仅在图像不存在时自动拉取图像。 这可能会导致您运行恰好位于消费者系统上的旧版本的映像。 这在 Kubernetes 等集群环境中尤其成问题,您需要更改 Kubernetes 部署规范中的图像名称文本以触发更新。

特别是在 CI 系统中,我建议为每个构建分配某种独特的标签。 这可能基于源代码管理提交 ID、分支名称和绑定编号、当前日期或其他内容。 您可以创建这样的固定标签以方便开发人员(允许图像具有多个标签),但我计划不将其用于实际部署。

暂无
暂无

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

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