将 Container Registry 与 Google Cloud 搭配使用

为了简化构建和部署工作流,部分 Google Cloud 服务帐号和运行时环境会预先配置权限,以访问存储在同一项目中的容器。

本页面汇总了与 Google Cloud 产品的常见集成以及访问容器的相关要求。

常规访问权限要求

默认情况下,部分常见集成的服务帐号会配置 Cloud Storage 权限,以访问同一项目中的 Container Registry。

对于 Compute Engine 虚拟机(包括 Google Kubernetes Engine 集群中的虚拟机)使用的服务帐号,访问权限基于 Cloud IAM 权限和存储空间访问权限范围

在下列情况下,您必须自行配置或修改权限:

  • 您使用一个项目中的服务帐号访问另一个项目中的 Container Registry
  • 您使用的是默认服务帐号,该帐号拥有对存储空间的只读权限,但您希望能够拉取和推送映像
  • 您使用自定义服务帐号与 Container Registry 进行交互

请参阅产品特定部分以了解更多信息。

Cloud Build

默认情况下,当 Container Registry 位于同一项目中时,Cloud Build 服务帐号有权推送和拉取映像。

在下列情况下,您必须自行配置适当的权限:

  • Cloud Build 与您希望构建访问的代码库不在同一个项目中。
  • 您的构建使用的服务帐号不是默认的 Cloud Build 服务帐号。在这种情况下,您必须授予服务帐号访问 Container Registry 的权限。

Compute Engine

如果虚拟机实例和 Container Registry 在同一个 Google Cloud 项目中,则 Compute Engine 的默认服务帐号会配置拉取映像的权限。

如果虚拟机实例位于其他项目中,或者虚拟机实例使用其他服务帐号,则您必须授予服务帐号相应的权限,以访问 Container Registry 使用的存储分区。

默认情况下,Compute Engine 虚拟机会针对存储分区配置 read-only 访问权限范围。如需推送私有 Docker 映像,虚拟机实例必须具有read-write存储空间访问权限范围

Container-Optimized Compute Engine 实例

如需了解如何使用注册表中的映像启动 Container-Optimized Compute Engine 实例,请参阅通过 cloud-config 启动 Docker 容器

如需了解详情,请参阅创建和配置实例

Google Kubernetes Engine

Google Kubernetes Engine 使用在集群节点的虚拟机实例上配置的服务帐号来推送和拉取映像。

所需权限

如果 Google Kubernetes Engine 集群和 Container Registry 存储分区位于同一个 Google Cloud 项目中,则系统会为 Compute Engine 默认服务帐号配置适当的权限来推送或拉取映像。

如果集群位于其他项目中,或者集群中的虚拟机使用其他服务帐号,则您必须授予该服务帐号相应的权限,以访问 Container Registry 使用的存储分区。

默认情况下,Compute Engine 虚拟机会针对存储分区配置 read-only 访问权限范围。如需推送私有 Docker 映像,虚拟机实例必须具有read-write存储空间访问权限范围

运行映像

您可以使用以下命令在 Google Kubernetes Engine 集群上运行 Container Registry 映像:

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

其中:

  • [NAME] 是资源的名称
  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud Console 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是标识 Container Registry 映像版本的标记。如果您未指定标记,则 Container Registry 将查找默认标记 latest

如需详细了解 Kubernetes 命令,请参阅 kubectl 概览

App Engine 柔性环境

App Engine 柔性环境中,通过提供自定义 Docker 映像或 Dockerfile 文件,您可以自定义现有运行时(例如 Java 8)或提供您自己的运行时。

柔性环境会自动使用 Cloud Build 构建容器映像,并将其存储在 Container Registry 中。

所需权限

如果用于推送或拉取映像的虚拟机实例和 Container Registry 存储分区位于同一个 Google Cloud 项目中,则系统会为 Compute Engine 默认服务帐号配置适当的权限来推送或拉取映像。

如果虚拟机位于其他项目中,或者虚拟机使用其他服务帐号,则您必须授予服务帐号相应的权限,以访问 Container Registry 使用的存储分区。

默认情况下,Compute Engine 虚拟机会针对存储分区配置 read-only 访问权限范围。如需推送私有 Docker 映像,虚拟机实例必须具有read-write存储空间访问权限范围

部署到 App Engine

您可以使用 gcloud 命令行工具将 Container Registry 托管的映像部署到 App Engine。

您可以在映像的根目录中使用 gcloud beta app gen-config 命令自动创建将映像部署到 App Engine 所需的 app.yaml 文件。您也可以自行编写此文件。

创建 App Engine 配置文件、构建 Docker 映像并将映像推送到 Container Registry后,您可以运行以下命令来将映像部署到 App Engine:

gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

其中:

  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud Console 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是标识 Container Registry 映像版本的标记。如果您未指定标记,则 Container Registry 将查找默认标记 latest