什么是OCI和OCI工件?

22-03-22 banq

OCI(开放容器倡议)管理一些与容器镜像的存储、分发和执行相关的规范和项目。
如果您曾经运行过 docker 容器,那么无论您是否知道,您都曾与这些规范进行过交互。

Docker镜像和 OCI镜像大部分是相同的。在 OCI 的早期,最普遍的容器格式是 Docker。
随着供应商推动中性规范,Docker镜像清单格式包含一堆对Docker公司的硬编码引用。
见:Docker 清单(称为Image Manifest 2 Schema Version 2)

这个清单中的样板文件是了解 OCI镜像是什么以及为什么不是 OCI镜像的重要部分,特别是以下mediaType字段:

“mediaType”: “application/vnd.docker.distribution.manifest.v2+json”
“mediaType”: “application/vnd.docker.container.image.v1+json”
“mediaType”: “application/vnd.docker.image.rootfs.diff.tar.gzip”


随着时间的推移,大多数注册管理机构都增加了对新mediaTypes格式的支持,但想要保持可移植性的工具需要继续支持旧格式。

OCI 工件(Artifacts)计划旨在使注册表格式更加通用,以允许用户存储和分发任意文件。
它也得到了平台供应商的广泛支持,最终恰好是构建生产 Kubernetes 环境的唯一真正依赖项。

HelmTektonCDOPA等与Kubernetes 相邻的项目开始顺应这一趋势,允许将配置、图表和策略模块存储在 OCI 注册表中。其他包管理器也纷纷效仿,比如Homebrew甚至WASM

OCI工件不是新类型,也不是新的规范注册表和工具,是关于如何使用清单中的特定字段来指示清单包含的内容的文档化约定。
不幸的是,它还没有得到足够广泛的支持而无法使用。一些规范依赖它(主要是 WASM),而其他规范则不依赖它。