Docker Hub 上的 OCI 工件

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

什么是 OCI 工件?

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

  • Helm Charts
  • 软件物料清单(SBOM)
  • 数字签名
  • 来源数据
  • 证明
  • 漏洞报告

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

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

使用 Docker Hub 与 OCI 工件

你管理 Docker Hub 上的 OCI 工件的方式与管理容器镜像类似。

推送和拉取 OCI 工件到/从注册表是使用注册表客户端完成的。 ORAS CLI 是一个命令行工具,提供了在注册表中管理 OCI 工件的功能。如果你使用 Helm Charts, Helm CLI 提供了将图表推送到/拉取自注册表的内置功能。

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

示例

本节展示了一些使用 Docker Hub 上的 OCI 工件的示例。

推送 Helm Chart

以下步骤展示了如何将 Helm Chart 作为 OCI 工件推送到 Docker Hub。

先决条件

  • Helm 版本 3.0.0 或更高版本

步骤

  1. 创建一个新的 Helm Chart

    $ helm create demo
    

    此命令会生成一个样板模板图表。

  2. 将 Helm Chart 打包成一个 tarball。

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

    $ 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 Chart tarball 上传到 docker 命名空间中的 demo 仓库。

  5. 转到 Docker Hub 上的仓库页面。页面的“标签”部分显示了 Helm Chart 标签。

    List of repository tags
  6. 选择标签名称以转到该标签的页面。

    该页面列出了几个用于处理 Helm Charts 的有用命令。

    Tag page of a Helm chart artifact

推送卷

以下步骤展示了如何将容器卷作为 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
    

    这会将卷上传到 docker 命名空间中的 demo 仓库。--artifact-type 标志指定了一种特殊的媒体类型,它使 Docker Hub 将工件识别为容器卷。

  4. 转到 Docker Hub 上的仓库页面。该页面上的“标签”部分显示了卷标签。

    Repository page showing a volume in the tag list

推送通用工件文件

以下步骤展示了如何将通用 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 上的仓库页面。该页面上的“标签”部分显示了工件标签。

    Repository page showing an artifact in the tag list