将 Container Registry 与 Google Cloud 搭配使用

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

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

常规访问权限要求

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

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

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

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

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

Cloud Build

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

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

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

Compute Engine

您可以使用存储在 Container Registry 中的映像创建虚拟机实例。

所需权限

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

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

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

如需详细了解权限和访问权限范围,请参阅与 Google Cloud 服务集成

部署映像

创建虚拟机时,您可以将映像部署到该虚拟机。如需了解详情,请参阅关于部署容器创建虚拟机实例模板的 Compute Engine 文档。

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 Cloud 服务集成

运行映像

您可以使用以下命令在 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 控制台项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是标识 Container Registry 映像版本的标记。如果您未指定标记,则 Container Registry 将查找默认标记 latest

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

Cloud Run

您可以将存储在 Container Registry 中的映像部署到 Cloud Run。

所需权限

如需部署到 Cloud Run,您必须具有 Owner 或 Editor 角色,或者 Cloud Run Admin 和 Service Account User 角色,或者任何包含此特定的权限列表的自定义角色。

部署映像

要了解如何将映像部署到 Cloud Run,请参阅 Cloud Run 文档

App Engine 柔性环境

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

通过 Cloud Build,您可以自动构建容器,将它们推送到 Container Registry 并部署到 App Engine。

所需权限

默认情况下,App Engine 默认服务账号有权在同一项目的代码库中进行拉取和推送。

如果 App Engine 位于其他项目中,您必须向 App Engine 服务账号授予访问 Container Registry 代码库的权限

部署到 App Engine

您可以使用 Google Cloud CLI 将 Container Registry 托管的映像部署到 App Engine。

  1. 为您的应用创建 App Engine 配置文件
  2. 构建一个 Docker 映像,并将其push代码库。您可以使用 Cloud Build 构建容器并将其推送到代码库。
  3. 通过运行以下命令将映像部署到 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 控制台项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是标识 Container Registry 映像版本的标记。如果您未指定标记,则 Container Registry 将查找默认标记 latest