Docker Hub 上的软件工件
您可以使用 Docker Hub 来存储任何类型的软件工件,而不仅仅是 容器镜像。软件工件是在软件期间生成的任何项目 有助于创建、维护或 了解软件。Docker Hub 通过利用 OCI 对象支持 镜像清单上的 config 属性。
什么是 OCI 构件?
OCI 对象是与软件应用程序相关的任何任意文件。一些 示例包括:
- Helm 图表
- 软件物料清单 (SBOM)
- 数字签名
- 来源数据
- 证明
- 漏洞报告
支持 OCI 构件的 Docker Hub 意味着您可以使用一个资料档案库来存储 以及分发容器镜像和其他资产。
OCI 构件的一个常见用例是 Helm 图表。Helm 图表是一种打包 格式,用于定义应用程序的 Kubernetes 部署。自 Kubernetes 以来 是容器的常用运行时,因此托管应用程序镜像是有意义的 和部署模板都集中在一个位置。
将 OCI 对象与 Docker Hub 结合使用
您可以像管理容器一样在 Docker Hub 上管理 OCI 对象 镜像。
将 OCI 对象推送到注册表和从注册表中拉取是使用 Registry 客户端。ORAS CLI 是一个命令行工具,提供管理 注册表中的 OCI 构件。如果您使用 Helm 图表,Helm CLI 会提供内置的 用于将图表推送到注册表和从注册表拉取图表的功能。
注册表客户端调用对 Docker Hub 注册表 API 的 HTTP 请求。这 注册表 API 符合 OCI 分发规范中定义的标准协议。
例子
本节介绍有关将 OCI 对象与 Docker Hub 结合使用的一些示例。
推送 Helm Chart
以下过程显示如何将 Helm 图表作为 OCI 构件推送到 Docker Hub 的 Docker Hub 中。
先决条件:
- Helm 版本 3.0.0 或更高版本
步骤:
创建新的 Helm Chart
$ helm create demo
此命令将生成样板模板图表。
将 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 上传到命名空间中的存储库。
demo
docker
转到 Docker Hub 上的存储库页面。页面的 Tags 部分 显示 Helm 图表标签。
选择标签名称以转到该标签的页面。
该页面列出了一些用于处理 Helm Chart 的有用命令。
推送卷
以下过程显示如何将容器卷作为 OCI 构件推送到 Docker Hub 的 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 Hub 将构件识别为容器卷。
demo
docker
--artifact-type
转到 Docker Hub 上的存储库页面。该页面上的 Tags 部分 显示 volume 标签。
推送通用构件文件
以下过程显示如何将通用 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 部分 显示 artifact 标签。