Docker Hub 上的软件工件

您可以使用 Docker Hub 存储任何类型的软件工件,而不仅仅是容器镜像。软件工件是在软件开发过程中产生的任何有助于软件创建、维护或理解的项。Docker Hub 通过利用镜像清单上的 config 属性来支持 OCI 工件。

什么是 OCI 工件?

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

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

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

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

在 Docker Hub 中使用 OCI 工件

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

使用注册表客户端可以向注册表推送和从注册表拉取 OCI 工件。ORAS CLI 是一个命令行工具,提供了在注册表中管理 OCI 工件的功能。如果您使用 Helm Charts,Helm CLI 提供了内置功能,用于向注册表推送和从注册表拉取 Chart。

注册表客户端调用 HTTP 请求到 Docker Hub 注册表 API。注册表 API 符合 OCI distribution specification 中定义的标准协议。

示例

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

推送 Helm Chart

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

先决条件

  • Helm 版本 3.0.0 或更高版本

步骤

  1. 创建新的 Helm Chart

    $ helm create demo
    

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

  2. 将 Helm Chart 打包成 tarball。

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

    $ helm registry login registry-1.docker.io -u hubuser
    
  4. 将 Chart 推送到 Docker Hub 仓库。

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

    这会将 Helm Chart tarball 上传到 docker 命名空间中的 demo 仓库。

  5. 前往 Docker Hub 上的仓库页面。该页面的“标签”(Tags)部分会显示 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 上的仓库页面。该页面的“标签”(Tags)部分会显示该卷的标签。

    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 上的仓库页面。该页面的“标签”(Tags)部分会显示该工件的标签。

    Repository page showing an artifact in the tag list
页面选项