构建与制品管理58 条

OCI 制品与 ORAS

OCI registry 不只能存镜像:Helm Chart、SBOM、签名、安装包都可以作为 OCI 制品存放,复用同一套仓库与权限。

CI/CD 与发布速查开发更新于 2026-10-13

OCI 制品是什么

OCI registry 不只能存容器镜像:自 OCI Image Spec 1.1 起,「通用制品」(artifact manifest)成为标准能力,Helm Chart、SBOM、签名、WASM 模块、安装包都可以作为 OCI 制品存放,复用同一套仓库地址、权限体系与复制、保留策略。常用工具链是 oras、helm 的 OCI 模式与 cosign(把签名、SBOM 作为镜像的伴生制品附着上去)。

基本信息

适用平台支持 OCI 规范的 registry:Harbor、GHCR、ECR 等
标准OCI Image Spec 1.1 起支持通用制品(artifact manifest)
工具oras、helm push(OCI 模式)、cosign attach
收益制品与镜像同库管理:权限、复制、保留策略统一

典型使用场景

  • Helm Chart 托管:chart 与镜像同仓,版本与权限一次管好
  • SBOM 与签名伴随:作为镜像的伴生制品推送,审计一个仓库即可取证
  • 二进制分发:CLI 工具、安装包走 OCI,吃现成的认证与缓存
  • 多制品版本对齐:镜像与 chart 用同一 tag 推送,部署时不易错配
  • 离线交付:整仓导出搬运,内网落地方便
  • 准入校验:集群准入器按镜像 digest 找到伴生签名与 SBOM,判定是否放行

ORAS 推送与拉取

ORAS 推送与拉取
oras push registry.example.com/tools/sbom:v1.8.0 \
  --artifact-type application/spdx+json sbom.spdx.json  # 推送 SBOM 制品
oras pull registry.example.com/tools/sbom:v1.8.0  # 消费端拉取
cosign attach sbom --sbom sbom.spdx.json registry.example.com/app:v1.8.0  # 与镜像关联
helm push chart-1.2.0.tgz oci://registry.example.com/charts  # Helm Chart 走 OCI
把 SBOM 与签名作为镜像的伴生制品推送,审计时一个仓库即可取证;保留策略记得覆盖这些副产物,否则镜像还在、证据先过期了。
registry 对通用制品的支持程度有差异:旧版或部分私有化 registry 可能不认识 artifact manifest,推送前先用 oras 试推一个验证。

常见制品与用法

制品存放方式消费方式
Helm Chart同仓库独立路径或 taghelm pull oci:// 拉取
SBOM / 签名作为镜像的伴生制品oras pull、cosign verify
CLI 二进制独立仓库或路径oras pull 后解压
WASM 模块独立仓库按 digest 引用加载
消费端尽量认 digest 而不认 tag:部署清单里写 digest,制品被覆盖或回滚都不会张冠李戴。
仓库侧先确认配额与保留策略:大体积制品长期堆积会吃掉 registry 存储配额,也和镜像争抢保留空间。

易错点

  • 把 registry 只当镜像库:其他制品散落在文件服务器,权限与生命周期失控
  • 不同工具的制品类型标识不统一:消费端按团队约定读取,避免猜测 mediaType
  • 用可变 tag 发制品:被覆盖后无法回溯,发布应使用不可变 tag 或 digest
  • registry 垃圾回收不识伴生制品:清理策略配置不当会误删签名与 SBOM
  • 可变 tag 的 SBOM 被当真:tag 漂移后 SBOM 对不上实际镜像,关联必须按 digest 校验
  • 所有内容都塞进同一个 registry:路径与配额不做规划,镜像与制品的保留策略互相挤压

数据来源与参考

  • OCI Image Spec 1.1
  • ORAS 文档(oras.land)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌