Container Registry 概览

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

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

您可以通过安全的 HTTPS 端点来访问 Container Registry,以便从任何系统、虚拟机实例或自己的硬件推送、拉取和管理映像。此外,您还可以使用 Docker 凭据帮助程序命令行工具,将 Docker 配置为直接进行 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 中,项目的注册表按映像名称列出。每个代码库可存储多个同名映像。例如,代码库中可以存储不同版本的名为“quickstart-image”的映像。

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

例如,在快速入门中,快速入门映像的注册表是 gcr.io/PROJECT-ID。如需推送和拉取该映像,请使用以下格式:

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

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

注册表中的映像版本

一个注册表可以包含许多映像,并且这些映像可以有不同的版本。如需标识注册表中映像的特定版本,您可以指定映像的标记或摘要。在注册表中,每个映像版本的标记各不相同。摘要是自动生成的,并且每个映像版本的摘要不会重复,格式为 @IMAGE-DIGEST。其中,IMAGE-DIGEST 是映像内容的 sha256 哈希值。

例如,在快速入门中,如需标识映像的特定版本,请按如下所述操作:

  • 添加映像的标记:

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

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

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

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

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

网域级项目

如果您的项目被限定在您的网域范围内,那么项目 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 存储分区拥有推送和拉取权限。Project Viewer 仅拥有拉取权限。

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

如需了解将映像元数据从 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 代码库的拉取速度。使用 mirror.gcr.io 时,您的客户端会首先尝试从 Container Registry 镜像中拉取 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 集成的第三方解决方案的列表,请参阅持续交付工具集成