Container Registry 概览

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

很多人都会使用 Dockerhub 作为存储公共 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 在亚洲托管映像

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

  • [PROJECT-ID] 是您的 Google Cloud Platform Console 项目 ID

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

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

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

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

其中,[PROJECT-ID] 是您的 Google Cloud Platform 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 Platform Console 项目 ID

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

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

网域级项目

如果项目的范围限定在网域内,则项目 ID 将包含域名和一个冒号 (:)。鉴于 Docker 对冒号的处理方式,您需要使用以下格式来标识这类项目中的映像:

[HOSTNAME]/[DOMAIN]/[PROJECT]/[IMAGE]

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

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

网址格式的注册表名称

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

例如,以下网址会链接到 GCP 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 弃用声明

身份验证

您可以使用 gcloud docker -a 命令配置使用 GCP 凭据的 Docker 身份验证。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 拥有,但专供您的项目使用,并会列在 GCP Console 的“服务帐号”和“IAM”部分中。

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

镜像

mirror.gcr.io 注册表是 Docker Hub 官方代码库的全局 Container Registry 镜像。

使用镜像可以加快 Docker Hub 代码库的拉取速度。当您使用 mirror.gcr.io 时,您的客户端会首先尝试从 Container Registry 镜像中拉取 Docker Hub 官方映像。

如需了解详情,请参阅使用 Container Registry 和 Docker Hub 镜像

通知

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

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

通过 GCP 使用 Container Registry

Compute Engine 实例可以根据实例上的 Cloud Storage 范围推送和拉取 Container Registry 映像。请参阅通过 GCP 使用 Container Registry

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

持续交付工具集成

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

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

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

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

某些第三方解决方案(例如 Kubernetes)提供了与 Container Registry 集成的说明文档

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

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Container Registry