Artifact Registry 是一项支持软件包和其他格式的通用软件包管理服务。了解如何从 Container Registry 过渡,以便更灵活地控制您的工件。

Container Registry 概览

Container Registry 是一个在 Google Cloud 上运行的私有容器映像注册表。Container Registry 支持 Docker Image Manifest V2 和 OCI 映像格式。

很多人都会使用 Docker Hub 作为存储公共 Docker 映像的中央镜像仓库,但若想控制映像的访问权限,则需要使用 Container Registry 等私有镜像仓库。

您可以通过安全的 HTTPS 端点来访问 Container Registry,以便从任何系统、虚拟机实例或自己的硬件推送、拉取和管理映像。

注册表

Container Registry 中的注册表以主机和项目 ID 命名。要对映像执行推送、拉取、删除等操作,请使用以下格式标识相关映像:

HOSTNAME/PROJECT-ID/IMAGE:TAG

HOSTNAME/PROJECT-ID/IMAGE@IMAGE-DIGEST

其中:

  • HOSTNAME 是映像存储位置:

    • gcr.io 目前在美国托管映像,但此托管位置未来可能会发生变化
    • us.gcr.io 在美国托管映像,使用的存储分区与 gcr.io 托管的映像不同
    • eu.gcr.io 在欧盟托管映像
    • asia.gcr.io 在亚洲托管映像

    这些位置对应于 Cloud Storage 存储分区的多区域位置。如果您将映像推送到使用新主机名的注册表,Container Registry 会在指定的多区域位置中创建一个存储分区。该存储分区是注册表的底层存储空间。在项目中,所有使用相同主机名的注册表都共用一个存储分区。

  • PROJECT-ID 是您的 Google Cloud Console 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅下文中的网域级项目

  • IMAGE 是映像的名称。该名称可能与映像的本地名称不同。在 Google Cloud Console 中,项目的注册表按映像名称列出。每个代码库可存储多个同名映像。例如,代码库中可以存储不同版本的名为“my-image”的映像。

  • 您也可以选择在映像名称末尾添加 :TAG@IMAGE-DIGEST 来区分映像的特定版本。如果您未指定标记或摘要,Container Registry 将查找带有默认标记 latest 的映像。请参阅下文中的注册表中的映像版本

对于注册表 gcr.io/PROJECT-ID 中的映像 my-image,您可以采用以下格式来推送或拉取映像:

gcr.io/PROJECT-ID/my-image:tag1

其中,PROJECT-ID 是您的 Google Cloud Console 项目 ID

使用代码库组织映像

您可以将注册表中的相关映像划分到注册表中的代码库下。当您标记、推送或拉取映像时,您可以在映像路径中的项目下指定代码库名称。

请思考以下示例:

us.gcr.io/builds/dev/web-app:beta-2.0
us.gcr.io/builds/stable/web-app:1.0

项目 builds 中有两个名为 web-app 的映像。一个位于 dev 代码库中,另一个位于 stable 代码库中。此结构让您可存储映像的不同版本,以支持不同的开发阶段或不同团队。

如果需要,您可以嵌套代码库。在此示例中,两个单独的产品都有一个顶层代码库,其下有子代码库。

us.gcr.io/builds/product1/dev/product1-app:beta-2.0
us.gcr.io/builds/product1/stable/product1:1.0
us.gcr.io/builds/product2/dev/product2:alpha
us.gcr.io/builds/product2/stable/product2:1.0

代码库是一个组织 ID。它们充当映像路径中的逻辑文件夹,但没有反映实际的文件系统结构或支持更精细的访问权限控制。

注册表中的映像版本

一个注册表可以包含许多映像,并且这些映像可以有不同的版本。如需标识注册表中映像的特定版本,您可以指定映像的标记或摘要。

  • 标记充当标签。您可以将多个标记应用于一个映像。例如,一个映像可能具有标记 v1.5 来表示版本号,而 release-candidate 表示最终测试的就绪性。
  • 摘要是自动生成的,并且每个映像版本的摘要不会重复,格式为 @IMAGE-DIGEST。其中,IMAGE-DIGEST 是映像内容的 sha256 哈希值。

如需识别映像 my-image 的特定版本,请执行以下命令:

  • 添加映像的标记:

    gcr.io/PROJECT-ID/my-image:tag1
    
  • 或添加映像的摘要:

    gcr.io/PROJECT-ID/my-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
    

其中,PROJECT-ID 是您的 Google Cloud Console 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅下文中的网域级项目

在 Cloud Console 的映像屏幕上,标记列会列出映像的标记。点击映像的版本可以查看元数据,包括映像摘要

如需了解如何修改标记,请参阅标记映像

网域级项目

如果您的项目被限定在您的网域范围内,那么项目 ID 应包含相应域名和一个英文冒号 (:)。鉴于 Docker 对英文冒号的处理方式,当您在 Container Registry 中指定映像摘要时,必须用正斜杠替换英文冒号字符。请使用以下格式来标识这类项目中的映像:

HOSTNAME/[DOMAIN]/[PROJECT]/IMAGE

例如,ID 为 example.com:my-project 的项目可能会有下列映像:

gcr.io/example.com/my-project/image-name

网址格式的注册表名称

网址 https://HOSTNAME/PROJECT-ID/IMAGE 是 Cloud Console 中相应注册表的网址。任何有权访问该注册表且经过身份验证的用户都可以访问这些链接。如需了解如何构造注册表名称,请参阅上文。

例如,以下网址会链接到 Cloud Console 中的公共注册表:

容器映像格式

Container Registry 支持 Docker Image Manifest V2 和 OCI 映像格式。

如需了解详情,请参阅容器映像格式

访问控制

Container Registry 将容器映像的标记和层文件存储在注册表所属项目的 Cloud Storage 存储分区中。您可以使用 Cloud Storage 的 Identity and Access Management (IAM) 设置来配置存储分区的访问权限。

默认情况下,项目所有者和编辑者对该项目的 Container Registry 存储分区拥有推送和拉取权限。项目查看者仅拥有拉取权限。

如需了解详情,请参阅配置访问控制

如需将映像元数据从 Cloud Storage 迁移到高性能后端数据库的相关计划,请参阅 Container Registry 弃用声明

身份验证

您必须先配置身份验证,然后才能推送或提取映像。您可以将 Docker 配置为使用 gcloud 命令行工具验证对向 Container Registry 发出的请求进行身份验证。Container Registry 还支持使用访问令牌或 JSON 密钥文件的高级身份验证方法

Docker 凭据帮助程序

为推送和拉取映像,Docker 需要访问 Container Registry。您可以使用 Docker 凭据帮助程序命令行工具来配置要用于 Docker 的 Container Registry 凭据。

该凭据帮助程序会自动或从其 --token-source 标志指定的位置提取 Container Registry 凭据,然后将凭据写入 Docker 的配置文件。这样,您就可以使用 Docker 命令行工具 docker 直接与 Container Registry 进行交互。

如需了解详情,请参阅高级身份验证

Container Registry 服务帐号

启用 Container Registry API 时,Container Registry 会为您的项目添加一个服务帐号。此服务帐号的名称如下所示:

service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com

此 Container Registry 服务帐号专为 Container Registry 在您的项目中执行其服务任务而设计。此帐号为 Google 拥有,但专供您的项目使用,并会列在 Cloud Console 的“服务帐号”和“IAM”部分中。

如果您删除此服务帐号或更改其权限,某些 Container Registry 功能将无法正常起作用。因此建议您不要修改角色或删除帐号。

拉取缓存

mirror.gcr.io 镜像仓库会缓存官方 Docker Hub 代码库中经常被请求的公共映像。

使用缓存的映像可以加快从 Docker Hub 拉取的速度。客户端始终先检查 Docker Hub 映像的缓存副本,然后再尝试直接从 Docker Hub 拉取映像。

如需了解详情,请参阅拉取缓存的 Docker Hub 映像

通知

您可以使用 Pub/Sub 获取有关容器映像更改的通知。

如需了解详情,请参阅配置 Pub/Sub 通知

将 Container Registry 与 Google Cloud 搭配使用

Compute Engine 实例和 Google Kubernetes Engine 集群可以根据实例上的 Cloud Storage 范围推送和拉取 Container Registry 映像。请参阅将 Container Registry 与 Google Cloud 搭配使用

存储在 Container Registry 中的映像可以部署到 App Engine 柔性环境

持续交付工具集成

Container Registry 使用数种常用的持续交付系统

通过第三方解决方案使用 Container Registry

在开发应用时,您可能希望使用第三方集群管理、持续集成或 Google Cloud 之外的其他解决方案。Container Registry 可与这些外部服务集成。

这些解决方案可能无法让您访问 gcloud 命令行工具进行身份验证。在这种情况下,您可以使用 docker login 直接进行 Container Registry 身份验证。如需了解详情,请参阅高级身份验证

如需与 Container Registry 集成的第三方解决方案的列表,请参阅持续交付工具集成