我试图弄清楚有关镜像 ID、清单和摘要的 docker 术语,以便了解 docker 如何维护分布式镜像的完整性。并且有一个(许多)意想不到的点。我刚刚保存了一个现有镜像,将其解压回来,但无法理解其manifest.json
文件中的内容:
$ docker save 000908da321f > a.tar
$ tar -xvf ./a.tar -C a
$ ls a
blobs index.json manifest.json oci-layout
{
"schemaVersion":2,
"mediaType":"application/vnd.oci.image.index.v1+json",
"manifests":
[
{
"mediaType":"application/vnd.oci.image.manifest.v1+json",
"digest":"sha256:dbe15f62d97cfdb1271a9612e4df8bd5d79b11404dcaed42b82e4cf796338f37",
"size":1011
}
]
}
我可以dbe15
在 中找到a/blob/sha256/
。这也是有道理的:它是一个mediaType manifest
带有config
和 的layers
内部。重新制作带有 的主题标签sha256sum
可以匹配它们。
但manifest.json
它不遵循图像规范架构。它是一个列表,并且没有schemaVersion
and mediaType
:
[
{
"Config": "blobs/sha256/000908da321ffa9418f599f3476fece162f3903f3f2e9fdd508c8b91ee9008ff",
"Layers": [
"blobs/sha256/08000c18d16dadf9553d747a58cf44023423a9ab010aab96cf263d2216b8b350",
...
],
"LayerSources": { ... },
"RepoTags": null
}
]
它看起来有点像,但实际上不是。这个文件是什么?当它不遵循图像清单的架构时,docker image inspect <image ID>
调用它的原因是什么?manifest.json