Docker Hub 上的 OCI 工件

您可以使用 Docker Hub 来存储任何类型的软件工件,而不仅仅是容器映像。 Docker Hub 通过利用映像清单上的配置属性来支持 OCI 工件。

什么是 OCI 工件?

OCI 工件是与软件应用程序相关的任意文件。一些例子包括:

  • 舵图
  • 软件物料清单 (SBOM)
  • 数字签名
  • 出处数据
  • 证明
  • 漏洞报告

Docker Hub 支持 OCI 工件,这意味着您可以使用一个存储库来存储和分发容器映像以及其他资产。

OCI 工件的一个常见用例是 Helm 图表。 Helm 图表是一种打包格式,定义应用程序的 Kubernetes 部署。由于 Kubernetes 是一种流行的容器运行时,因此将应用程序映像和部署模板全部托管在一个地方是有意义的。

将 OCI 工件与 Docker Hub 结合使用

您在 Docker Hub 上管理 OCI 工件的方式与管理容器映像的方式类似。

使用注册表客户端将 OCI 工件推送到注册表或从注册表中拉出 OCI 工件。 ORAS CLI 是一个命令行工具,提供管理注册表中 OCI 工件的功能。如果您使用 Helm 图表,则 Helm CLI提供用于将图表推送到注册表或从注册表中提取图表的内置功能。

注册表客户端向 Docker Hub 注册表 API 调用 HTTP 请求。注册表 API 符合 OCI 分发规范中定义的标准协议。

例子

本节展示了一些有关将 OCI 工件与 Docker Hub 一起使用的示例。

推送 Helm 图表

以下过程演示如何将 Helm 图表作为 OCI 工件推送到 Docker Hub。

先决条件:

  • Helm 版本 3.0.0 或更高版本

脚步:

  1. 创建新的 Helm 图表

    $ helm create demo
    

    此命令生成样板模板图表。

  2. 将 Helm 图表打包成 tarball。

    $ helm package demo
    Successfully packaged chart and saved it to: /Users/hubuser/demo-0.1.0.tgz
    
  3. 使用您的 Docker ID 凭据通过 Helm 登录 Docker Hub。

    $ helm registry login registry-1.docker.io -u hubuser
    
  4. 将图表推送到 Docker Hub 存储库。

    $ helm push demo-0.1.0.tgz oci://registry-1.docker.io/docker
    

    这会将 Helm 图表 tarball 上传到命名demo空间中的存储库docker

  5. 转到 Docker Hub 上的存储库页面。页面的标签部分显示 Helm 图表标签。

    存储库标签列表
  6. 选择标签名称即可转至该标签的页面。

    该页面列出了一些使用 Helm 图表的有用命令。

    Helm 图表工件的标签页

推送音量

以下过程演示如何将容器卷作为 OCI 工件推送到 Docker Hub。

先决条件:

  • ORAS CLI 版本 0.15 或更高版本

脚步:

  1. 创建一个虚拟文件用作卷内容。

    $ touch myvolume.txt
    
  2. 使用 ORAS CLI 登录 Docker Hub。

    $ oras login -u hubuser registry-1.docker.io
    
  3. 将文件推送到 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 将工件识别为容器卷。

  4. 转到 Docker Hub 上的存储库页面。该页面上的标签部分显示卷标签。

    存储库页面在标签列表中显示卷

推送通用工件文件

以下过程展示了如何将通用 OCI 工件推送到 Docker Hub。

先决条件:

  • ORAS CLI 版本 0.15 或更高版本

脚步:

  1. 创建您的工件文件。

    $ touch myartifact.txt
    
  2. 使用 ORAS CLI 登录 Docker Hub。

    $ oras login -u hubuser registry-1.docker.io
    
  3. 将文件推送到 Docker Hub。

    $ oras push registry-1.docker.io/docker/demo:0.0.1 myartifact.txt:text/plain
    
  4. 转到 Docker Hub 上的存储库页面。该页面上的标签部分显示工件标签。

    在标签列表中显示工件的存储库页面