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 制品推送到注册表和从注册表中拉取 OCI 制品。 ORAS CLI 是一个命令行工具,它提供了在注册表中管理 OCI 制品的功能。如果您使用 Helm chart,则 Helm CLI 提供了将 chart 推送到注册表和从注册表中拉取 chart 的内置功能。
注册表客户端会向 Docker Hub 注册表 API 发出 HTTP 请求。注册表 API 符合在 OCI 分发规范 中定义的标准协议。
示例
本节显示了一些关于将 OCI 制品与 Docker Hub 一起使用的示例。
推送 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 凭据使用 Helm 登录到 Docker Hub。
$ 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 上的仓库页面。“标签”部分显示 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 上的仓库页面。该页面上的“标签”部分显示卷标签。
推送通用构件文件
以下步骤介绍了如何将通用 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 上的仓库页面。该页面上的“标签”部分显示构件标签。