Docker Hub 上的软件工件
您可以使用 Docker Hub 存储任何类型的软件工件,而不仅仅是容器镜像。软件工件是软件开发过程中产生的任何有助于创建、维护或理解软件的项。Docker Hub 通过利用镜像清单中的 `config` 属性来支持 OCI 工件。
什么是 OCI 工件?
OCI 工件是与软件应用程序相关的任何任意文件。一些示例包括:
- Helm chart
- 软件物料清单 (SBOM)
- 数字签名
- 出处数据
- 证明
- 漏洞报告
Docker Hub 支持 OCI 工件,这意味着您可以使用一个仓库来存储和分发容器镜像以及其他资产。
OCI 工件的一个常见用例是 Helm chart。Helm chart 是一种打包格式,它定义了应用程序的 Kubernetes 部署。由于 Kubernetes 是一个流行的容器运行时,因此将应用程序镜像和部署模板托管在同一位置是有意义的。
将 OCI 工件与 Docker Hub 结合使用
您可以在 Docker Hub 上以与容器镜像类似的方式管理 OCI 工件。
使用注册表客户端将 OCI 工件推送到和从注册表拉取。 ORAS CLI 是一个命令行工具,提供在注册表中管理 OCI 工件的能力。如果您使用 Helm chart,Helm CLI 提供内置功能,用于将 chart 推送到和从注册表拉取。
注册表客户端调用 Docker Hub 注册表 API 的 HTTP 请求。注册表 API 符合 OCI 分发规范中定义的标准协议。
示例
本节展示了一些使用 Docker Hub 上的 OCI 工件的示例。
推送 Helm chart
以下过程演示了如何将 Helm chart 作为 OCI 工件推送到 Docker Hub。
先决条件
- Helm 3.0.0 或更高版本
步骤
创建一个新的 Helm chart
$ helm create demo此命令生成样板模板 chart。
将 Helm chart 打包成一个 tarball。
$ helm package demo Successfully packaged chart and saved it to: /Users/hubuser/demo-0.1.0.tgz使用您的 Docker 凭据登录到 Docker Hub with Helm。
$ helm registry login registry-1.docker.io -u hubuser将 chart 推送到 Docker Hub 仓库。
$ helm push demo-0.1.0.tgz oci://registry-1.docker.io/docker这将 Helm chart tarball 上传到 `docker` 命名空间中的 `demo` 仓库。
转到 Docker Hub 上的仓库页面。页面的 **Tags** 部分显示 Helm chart 标签。

选择标签名称以转到该标签的页面。
该页面列出了一些用于处理 Helm chart 的有用命令。

推送卷
以下过程演示了如何将容器卷作为 OCI 工件推送到 Docker Hub。
先决条件
- 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这将卷上传到 `docker` 命名空间中的 `demo` 仓库。`--artifact-type` 标志指定了一个特殊的媒体类型,使 Docker Hub 将该工件识别为容器卷。
转到 Docker Hub 上的仓库页面。该页面上的 **Tags** 部分显示卷标签。

推送通用工件文件
以下过程演示了如何将通用 OCI 工件推送到 Docker Hub。
先决条件
- 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 上的仓库页面。该页面上的 **Tags** 部分显示工件标签。
