我需要将OCI映像清单转换为Docker v2.2映像格式,反之亦然。但是我无法找到两者之间的任何区别,是否存在任何实际区别或相同?
注册表映像清单定义了组成容器注册表上映像的组件(请参见容器注册表部分)。我们将使用的更常见的清单格式是Docker Image Manifest V2 Schema 2(更简单地说是V2.2)。还有一种V2架构1格式,该格式通常被使用,但由于与V1的向后兼容原因,它比V2.2更为复杂。
V2.2清单格式是具有以下顶级字段的JSON Blob:
[schemaVersion
-在这种情况下为2
[mediaType
-application/vnd.docker.distribution.manifest.v2+json
[config
-容器配置Blob的描述符
[layers
-层Blob的描述符列表,与容器配置的rootfs顺序相同]
Blob描述符是包含3个字段的JSON对象:
mediaType
-application/vnd.docker.container.image.v1+json
用于容器配置,或application/vnd.docker.image.rootfs.diff.tar.gzip
用于层
size
-Blob的大小,以字节为单位
[digest
-内容摘要
这里是V2.2清单格式的示例(适用于Docker Hub繁忙框映像:]
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1497,
"digest": "sha256:3a093384ac306cbac30b67f1585e12b30ab1a899374dabc3170b9bca246f1444"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 755724,
"digest": "sha256:57c14dd66db0390dbf6da578421c077f6de8e88edd0815b4caa94607ba5f4c09"
}
]
}
OCI映像格式本质上与Docker V2.2格式相同,但有一些区别。
mediaType
-必须设置为application/vnd.oci.image.manifest.v1+json
config.mediaType
-必须设置为application/vnd.oci.image.config.v1+json
层中的每个对象必须具有mediaType
为application/vnd.oci.image.layer.v1.tar+gzip
或application/vnd.oci.image.layer.v1.tar
。
来源:https://containers.gitbook.io/build-containers-the-hard-way/#registry-format-oci-image-manifest