Docker Hub 上的软件构件
您可以使用 Docker Hub 存储任何类型的软件制品,而不仅限于容器镜像。软件制品是指在软件开发过程中产生的、有助于软件创建、维护或理解的任何项目。Docker Hub 通过利用镜像清单中的 config 属性,支持 OCI 制品。
什么是 OCI 工件?
OCI 制品是指与软件应用程序相关的任何任意文件。一些示例包括:
- Helm charts
- 软件物料清单 (SBOM)
- 数字签名
- 溯源数据
- 断言
- 漏洞报告
Docker Hub 支持 OCI 工件,这意味着您可以使用一个仓库来存储和分发容器镜像及其他资产。
OCI 工件的常见使用场景是 Helm 图表。Helm 图表是一种打包格式,用于定义应用程序的 Kubernetes 部署配置。由于 Kubernetes 是容器的主流运行时环境,因此将应用程序镜像和部署模板统一托管在一个地方是十分合理的。
使用OCI工件与Docker Hub
您在 Docker Hub 上管理 OCI 工件的方式与管理容器镜像类似。
向注册表推送和从注册表拉取 OCI 工件需使用注册表客户端。 ORAS CLI 是一个命令行工具,可提供在注册表中管理 OCI 工件的能力。如果您使用 Helm 图表, Helm CLI 则内置了向注册表推送和从注册表拉取图表的功能。
注册表客户端向 Docker Hub 注册表 API 发送 HTTP 请求。该 注册表 API 遵循 OCI 分发规范 中定义的标准协议。
示例
本节展示了一些在 Docker Hub 中使用 OCI 工件的示例。
推送 Helm Chart
以下步骤展示了如何将 Helm 图表作为 OCI 工件推送到 Docker Hub。
Prerequisites:
- Helm 版本 3.0.0 或更高版本
步骤:
创建新的 Helm Chart
$ helm create demo此命令生成一个基础模板图表。
将Helm图表打包成tarball。
$ helm package demo Successfully packaged chart and saved it to: /Users/hubuser/demo-0.1.0.tgz使用您的 Docker 凭据,通过 Helm 登录 Docker Hub。
$ helm registry login registry-1.docker.io -u hubuser将图表推送到 Docker Hub 仓库。
$ helm push demo-0.1.0.tgz oci://registry-1.docker.io/docker这会将 Helm chart 压缩包上传到
demo命名空间下的docker仓库。前往 Docker Hub 上的仓库页面。该页面的 Tags 部分显示了 Helm chart 的标签。

选择标签名称以跳转到该标签对应的页面。
本页面列出了使用 Helm charts 的一些常用命令。

推送卷
以下步骤演示了如何将容器卷作为 OCI 工件推送到 Docker Hub。
Prerequisites:
- ORAS CLI 版本 0.15 或更高版本
步骤:
创建一个虚拟文件,用作卷的内容。
$ touch myvolume.txt使用 ORAS CLI 登录 Docker Hub。
$ oras login -u hubuser registry-1.docker.io将文件推送到 Docker Hub。
$ oras push registry-1.docker.io/docker/demo:0.0.1 \ --artifact-type=application/vnd.docker.volume.v1+tar.gz \ myvolume.txt:text/plain这会将卷上传至
demo命名空间下的docker仓库。使用--artifact-type标志可指定一种特殊媒体类型,使 Docker Hub 能够将该制品识别为容器卷。前往 Docker Hub 上的仓库页面。该页面上的 标签 部分显示了卷标签。

推送通用工件文件
以下步骤展示了如何将通用 OCI 工件推送到 Docker Hub。
Prerequisites:
- ORAS CLI 版本 0.15 或更高版本
步骤:
创建您的工件文件。
$ touch myartifact.txt使用 ORAS CLI 登录 Docker Hub。
$ oras login -u hubuser registry-1.docker.io将文件推送到 Docker Hub。
$ oras push registry-1.docker.io/docker/demo:0.0.1 myartifact.txt:text/plain访问 Docker Hub 上的仓库页面。该页面上的 标签 部分显示了工件标签。
