Eu estava tentando descobrir a terminologia do docker sobre ID de imagem, manifestos e resumos, para entender como o docker mantém a integridade de imagens distribuídas. E há um (de muitos) bits inesperados. Acabei de salvar uma imagem existente, descompactá-la e não consigo entender o que há em seu manifest.json
arquivo:
$ docker save 000908da321f > a.tar
$ tar -xvf ./a.tar -C a
$ ls a
blobs index.json manifest.json oci-layout
Aqui index.json
está um manifesto de índice de imagem que aponta para um manifesto específico :
{
"schemaVersion":2,
"mediaType":"application/vnd.oci.image.index.v1+json",
"manifests":
[
{
"mediaType":"application/vnd.oci.image.manifest.v1+json",
"digest":"sha256:dbe15f62d97cfdb1271a9612e4df8bd5d79b11404dcaed42b82e4cf796338f37",
"size":1011
}
]
}
E eu posso encontrar dbe15
em a/blob/sha256/
. Também faz sentido: é um mediaType manifest
com um config
e layers
dentro. E refazer as hashtags com sha256sum
combina com elas.
Mas manifest.json
não segue o esquema de especificação de imagem. É uma lista, e não há schemaVersion
e mediaType
:
[
{
"Config": "blobs/sha256/000908da321ffa9418f599f3476fece162f3903f3f2e9fdd508c8b91ee9008ff",
"Layers": [
"blobs/sha256/08000c18d16dadf9553d747a58cf44023423a9ab010aab96cf263d2216b8b350",
...
],
"LayerSources": { ... },
"RepoTags": null
}
]
Parece um pouco com o que sai de docker image inspect <image ID>
, mas não realmente. O que é esse arquivo e há uma razão pela qual ele é chamado manifest.json
quando não segue o esquema para um manifesto de imagem?