gpt4 book ai didi

Docker 中心图像缓存似乎不起作用

转载 作者:IT老高 更新时间:2023-10-28 12:45:32 35 4
gpt4 key购买 nike

我们在 circleci 上有一个持续集成管道,它执行以下操作:

  1. 从缓存目录加载 repo/image:mytag1 以便能够使用缓存层
  2. 构建新版本:docker build -t repoimage:mytag2
  3. 使用 docker save 将新版本保存到缓存目录
  4. 运行测试
  5. 推送到 docker hub:docker push repo/image:mytag2

问题出在第 5 步。推送步骤每次需要 5 分钟。如果我理解正确的话,docker hub 是用来缓存层的,所以如果基础镜像和依赖项没有更新,我们就不必重新推送它们。

我连续运行了两次构建,我在被推送的层的哈希中看到了很多交叉。然而,我看到的不是“图像已存在”,而是“图像已成功推送”。

Here's构建 1 的 docker push 和 here's build 2 的输出

如果您比较这两个文件,您会发现每个构建中只有 2 层不同:

< ca44fed88be6: Buffering to Disk
< ca44fed88be6: Image successfully pushed
< 5dbd19bfac8a: Buffering to Disk
< 5dbd19bfac8a: Image successfully pushed
---
> 9136b10cfb72: Buffering to Disk
> 9136b10cfb72: Image successfully pushed
> 0388311b6857: Buffering to Disk
> 0388311b6857: Image successfully pushed

那为什么每次都要重新推送所有的图片呢?

最佳答案

使用不同的标签会创建不同的图像,当被推送时,它不能依赖缓存。

例如两个命令:

$ docker commit -m "thing" -a "me" db65bf421f96 me/thing:v1
$ docker commit -m "thing" -a "me" db65bf421f96 me/thing:v2

产生完全不同的图像,即使它们是从相同的图像 (db65bf421f96) 创建的。推送时,dockerhub 必须将它们视为完全独立的图像,如下所示:

$ docker images
REPOSITORY TAG IMAGE ID
me/thing v2 f14aa8ac6bae
me/thing v1 c7d72ccc1d71

图像 ID 是唯一的,因此即使它们的标签不同,图像也是唯一的。

您可以说“docker 应该将它们识别为一点一点相同”,从而将它们视为可缓存的。但它(还没有)。

在您的示例中,唯一让我感到惊讶的是您有任何重复的图像 ID。

权威(如果解释较少)documentation can be found at docker在“构建自己的图像”中。

关于Docker 中心图像缓存似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887042/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com