您正在混合不同对象的摘要。注册表中的图像包括:
- Manifest:这是顶层,有自己的摘要,但通常用标签来引用
- 配置:清单指向这一点,它包括您在检查 docker 映像时看到的默认设置
- 层:每一层都有自己的摘要,这些通常是注册表中的 tar+gzip,本地拉取时为 tar(未压缩)
清单摘要是最常用的摘要,它用于固定图像以进行拉取。请注意,您可以有一个指向多个特定于平台的清单的清单列表,并且每个清单都有自己的摘要。
配置摘要不应与本地任何内容进行比较,需要从注册表中提取配置 blob,但它与层摘要没有直接关联,也不是清单摘要。
层摘要有时会混淆,因为当您从注册表上的压缩变为本地未压缩时,它们会发生变化。
什么是摘要?这只是内容上的 sha256sum。该文件作为 blob 或清单推送到注册表。由于清单如何包含其他文件的摘要,您最终会得到一个有向无环图 (DAG)。
要查看层重用,请查看图像清单中的实际层。或者您可以查看配置 blob 的层部分(这些摘要会有所不同,因为配置中的层摘要位于未压缩层上)。
这是查看 docker hub 上的两个图像的层重用示例:
$ regctl image manifest alpine:3.13
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1472,
"digest": "sha256:6dbb9cc54074106d46d4ccb330f2a40a682d49dda5f4844962b7dce9fe44aaec"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2811969,
"digest": "sha256:540db60ca9383eac9e418f78490994d0af424aab7bf6d0e47ac8ed4e2e9bcbba"
}
]
}
$ regctl image manifest redis:alpine
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 6390,
"digest": "sha256:1690b63e207f6651429bebd716ace700be29d0110a0cfefff5038bb2a7fb6fc7"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 2811969,
"digest": "sha256:540db60ca9383eac9e418f78490994d0af424aab7bf6d0e47ac8ed4e2e9bcbba"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 1258,
"digest": "sha256:29712d301e8c43bcd4a36da8a8297d5ff7f68c3d4c3f7113244ff03675fa5e9c"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 384200,
"digest": "sha256:8173c12df40f1578a7b2dfbbc0034a4fbc8ec7c870fd32b9236c2e5e1936616a"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 7692532,
"digest": "sha256:8cc52074f78e0a2fd174bdd470029cf287b7366bf1b8d3c1f92e2aa8789b92ae"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 135,
"digest": "sha256:aa7854465cce07929842cb49fc92f659de8a559cf521fc7ea8e1b781606b85cd"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 412,
"digest": "sha256:6ab1d05b49730290d3c287ccd34640610423d198e84552a4c2a4e98a46680cfd"
}
]
}
从那里您可以看到配置 blob 完全不同(正如预期的那样,它们不是同一张图像),但图像中的层与alpine
图像的第一层相同redis:alpine
。
此处显示的regctl
工具可从 github 获得。免责声明,我是作者。