jtm*_*mon 12 docker dockerhub docker-registry
我们在circleci上有一个持续集成管道,它执行以下操作:
问题在于步骤5.每次推送步骤需要5分钟.如果我理解正确,docker hub意味着缓存层,这样我们就不必重新推送基本映像和依赖关系(如果它们没有更新).
我连续两次运行构建,并且在被推送的层的哈希中看到了很多交叉.然而,不是"图像已经存在",我看到"图像成功推动".
这是build 1的docker push的输出,这里是build 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
Run Code Online (Sandbox Code Playgroud)
那么为什么所有的图像每次都必须重新推动呢?
使用不同的标签会创建不同的图像,该图像在推送时不能依赖缓存。
例如这两个命令:
$ docker commit -m "thing" -a "me" db65bf421f96 me/thing:v1
$ docker commit -m "thing" -a "me" db65bf421f96 me/thing:v2
Run Code Online (Sandbox Code Playgroud)
产生完全不同的图像,即使它们是从相同的图像创建的(db65bf421f96)。当推送时,dockerhub 必须将它们视为完全独立的镜像,如下所示:
$ docker images
REPOSITORY TAG IMAGE ID
me/thing v2 f14aa8ac6bae
me/thing v1 c7d72ccc1d71
Run Code Online (Sandbox Code Playgroud)
图像 ID 是唯一的,因此即使图像的标签不同,它们也是唯一的。
您可以说“docker 应该将它们识别为完全相同”,从而将它们视为可缓存的。但它(还)没有。
在你的例子中,唯一令我惊讶的是你有任何重复的图像ID。
权威的(如果解释性较少的)文档可以在 docker的“构建你自己的镜像”中找到。
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |