docker镜像ID与清单中的ID之间有什么关系?

前端之家收集整理的这篇文章主要介绍了docker镜像ID与清单中的ID之间有什么关系?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图理解docker图像(或docker inspect)报告的图像ID与注册表或清单中的实际图层或图像(使用v2)之间的联系.

我运行码头图像,我得到(缩写和更改以保护不那么无辜):

REPOSITORY                                             TAG                 IMAGE ID
my.local.registry/some/image      latest              abcdefg

如果我使用API​​拉出上面图像的清单,我会得到一个包含fsLayers的清单,而不是其中一个匹配图像的(完整)ID.我明白了,因为图像是图层的总和.

但是,如果我将该图像拉到别处,我会获得相同的ID.如果我更新图像,推送它,新版本有一个新的ID.

我认为它可能是清单的哈希.但是,(a)通过API提取清单不会返回JSON中清单的哈希值,并且(b)查看注册表目录本身,/ var / lib / registry / v2 /中给定清单的sha256存储库/ some / image / _manifests / tags / latest / current / link(或index / sha256 /中的那些)为下载的清单提供了正确的链接,但与映像ID不匹配.

我假设图像ID与blob匹配,但也许我错了?

当我们将图像推入注册表时,

>我们创建一个清单来定义图像 – 其中的图层,并独立地推送清单和图层.
>我们压缩图层,然后才推动它们.

因此,在我们的主机中,我们所拥有的哈希是这些层中存在的内容的哈希,称为内容哈希.

但是对于注册表,我们发送压缩层,因此内容会发生变化,因此哈希值会发生变化.因此,在发送这些压缩层之前,会计算压缩层的哈希值,这些哈希值称为分布哈希值,并将这些哈希值放入清单文件中.

由于这些内容和分布哈希值不同,您会看到ID的差异.

原文链接:https://www.f2er.com/docker/436588.html

猜你在找的Docker相关文章