Container Registry 用户设置指南

如果您目前使用 Container Registry 来管理容器,那么此页面将介绍如何设置 Artifact Registry 代码库以及使用这些代码库与使用 Container Registry 有何区别。

概览

为简单起见,本页面中的说明假定 Container Registry 和 Artifact Registry 位于同一个 Google Cloud 项目中。在过渡到 Artifact Registry 时,您可以继续使用这两项服务,以便可以逐步执行设置步骤并更新自动化。

如果需要,您可以在单个项目中设置 Artifact Registry,并执行相同的总体步骤。

过渡步骤

过渡到 Artifact Registry 的过程包含以下步骤:

  1. 在开始过渡之前,先了解 Artifact Registry 的价格
  2. 启用 Artifact Registry API。
  3. 更新 Cloud SDK 并了解新的 gcloud 命令。(可选)为 gcloud 命令设置默认值。
  4. 为容器创建 Docker 代码库。您必须先创建一个代码库,然后才能向其推送映像。
  5. 授予对代码库的权限
  6. 配置身份验证,以便您能够连接新的代码库。
  7. 如果需要,请从要用于新代码库的 Container Registry 中复制容器
  8. 尝试推送和拉取容器。
  9. 尝试将您的映像部署到运行时环境。
  10. 配置其他功能

启用服务

如需使用 Artifact Registry,请在 Cloud Console 中或使用以下命令启用 Artifact Registry API:

gcloud services enable artifactregistry.googleapis.com

后续步骤

更新和配置 Cloud SDK,或返回到步骤列表

更新和配置 Cloud SDK

Container Registry 使用 gcloud container images 命令。

Artifact Registry 使用 gcloud artifact 命令来处理映像。

  1. 安装 Cloud SDK(如果尚未安装)。

  2. 更新 gcloud 组件。

    gcloud components update
    

gcloud 命令对比

下表汇总了 gcloud 工具中的 Container Registry 命令和等效 Artifact Registry 命令。点击表中的链接可查看命令的参考页面。

该表不包含在 Container Registry 中没有等效命令的所有可用 Artifact Registry 命令。如需查看完整的 Artifact Registry 命令参考页面,请参阅 gcloud artifacts 文档。

操作 Container Registry Artifact Registry
创建代码库 不适用。 gcloud artifacts repositories create
删除代码库 不适用。 gcloud artifacts repositories delete
列出映像 gcloud container images list gcloud artifacts docker images list
列出标记 gcloud container images list-tags gcloud artifacts docker tags list
加标签 gcloud container images add-tag gcloud artifacts docker tags add
删除标记 gcloud container images untag gcloud artifacts docker tags delete
描述映像 gcloud container images describe gcloud artifacts docker image list --include-tags

后续步骤

创建代码库返回到步骤列表

创建代码库

如果您之前从未在多区域位置推送过映像,Container Registry 会自动在多区域位置创建一个存储分区。

在 Artifact Registry 中,您必须先创建代码库,然后才能上传映像。创建代码库时,您必须指定:

  • 代码库格式。Artifact Registry 将容器存储在 Docker 代码库中。
  • 代码库的区域或多区域位置

    为 Artifact Registry 代码库选择位置时,请考虑这些代码库与其他基础架构和用户之间的邻近程度。如果您打算将映像从 Container Registry 复制到 Artifact Registry,则位置之间的区别可能会影响复制费用。

  • Cloud Key Management Service 密钥(如果您使用客户管理的加密密钥 (CMEK) 进行加密的话)。

    在 Container Registry 中,您将 Container Registry 存储分区配置为使用 CMEK。在 Artifact Registry 中,您在创建代码库时将代码库配置为使用 CMEK。如需详细了解如何将 CMEK 用于 Artifact Registry,请参阅启用 CMEK(客户管理的加密密钥)

Container Registry 会在网域 gcr.io 上托管容器。Artifact Registry 会在网域 pkg.dev 上托管容器。

如需了解如何创建代码库(包括使用 CMEK 进行加密的代码库),请参阅创建代码库

后续步骤

授予权限返回到步骤列表

授予权限

在 Container Registry 中,访问权限控制基于 Cloud Storage 角色和权限。如果您不想授予项目级角色,则必须授予对 Container Registry 使用的特定存储分区的权限。

Artifact Registry 拥有自己的 IAM 角色。您可以在项目级层授予角色,也可以设置对各个代码库的权限。使用多个 Docker 代码库的同时结合使用特定于代码库的权限,来控制对不同类型的工件的访问权限。例如,您可以对生产代码库施加更严格的控制,或根据团队成员资格授予团队专属代码库的访问权限。

Google Cloud CI/CD 服务的服务帐号已预配置对同一项目中的代码库的访问权限。如果您使用其他项目或第三方工具中的 Google Cloud 服务来推送或拉取映像,则必须手动配置适当的权限。

如需查看授予权限的说明,请参阅授予权限

后续步骤

对您用于访问代码库的第三方工具配置身份验证,或返回到步骤列表

向代码库进行身份验证

Artifact Registry 支持与 Container Registry 使用相同的身份验证方法。

如果您使用的是 Docker 凭据帮助程序:

  • 您必须使用 2.0 或更高版本与 Artifact Registry 代码库进行交互。GitHub 中提供了独立版本。
  • 您必须使用打算使用的 Artifact Registry 位置配置凭据帮助程序。默认情况下,凭据帮助程序仅配置对 Container Registry 主机的访问权限。

如需详细了解如何设置身份验证,请参阅为 Docker 设置身份验证

后续步骤

复制您希望继续存储在 Artifact Registry 中的容器,或返回到步骤列表

从 Container Registry 中复制容器

如果 Container Registry 中存在您希望继续在 Artifact Registry 中使用的容器,您可以通过多种方法复制这些容器。如需查看相关说明,请参阅从 Container Registry 中复制映像

后续步骤

验证您是否可以推送和拉取容器,或返回到步骤列表

推送和拉取映像

您在 Artifact Registry 中用于标记、推送和拉取映像的 Docker 命令类似于您在 Container Registry 中使用的命令。主要有两个区别:

  • Artifact Registry Docker 代码库的主机名包含位置前缀,后跟 -docker.pkg.dev。例如 australia-southeast1-docker.pkg.deveurope-north1-docker.pkg.deveurope-docker.pkg.dev
  • 由于 Artifact Registry 支持在单个项目中使用多个 Docker 代码库,因此您必须在命令中指定代码库名称。

例如,在 Container Registry 中,此命令会将映像 my-image 推送到项目 my-project 中的注册表 eu.gcr.io

docker push eu.gcr.io/my-project/my-image

在 Artifact Registry 中,此命令会将映像 my-image 推送到代码库 my-repo 中的区域代码库 europe-north1-docker.pkg.dev 以及推送到项目 my-project

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

如需详细了解如何在 Artifact Registry 中推送和拉取映像,请参阅推送和拉取映像

后续步骤

验证您是否可以部署映像,或返回到步骤列表

部署映像

默认情况下,常见 Google Cloud 集成的服务帐号已配置为使用 Artifact Registry 代码库。

通常情况下,使用 Cloud Build 构建映像并将其推送到代码库的运作方式与 Container Registry 中的运作方式相同。在 Artifact Registry 中,主要区别在于目标代码库必须存在,您才能将映像推送到其中(包括您要推送的第一个映像)。

请务必在运行用于推送映像的命令(包括 Docker 命令 docker push 和 Cloud Build 命令 gcloud builds submit)之前先创建所需的代码库。

Cloud Build 构建器仍托管在 gcr.io 上。如需了解详情,请参阅与 Cloud Build 集成

后续步骤

配置其他特性返回到步骤列表

管理元数据并扫描漏洞

Container Analysis 同时支持 Container Registry 和 Artifact Registry。Container Analysis 文档已更新,其中包含这两个产品。

  • 这两个产品使用相同的 Container Analysis API。在 Container Registry 或 Artifact Registry 中启用 Container Analysis API 后,这两个产品都会启用 Container Analysis API。
  • 这两个产品都对 Pub/Sub 通知使用相同的“gcr”主题。这意味着您对“gcr”主题的订阅将同时包含 Artifact Registry 和 Container Registry 的通知。
  • 用于处理备注和发生实例的 Cloud SDK 命令位于 gcloud artifact docker 群组下。

其他功能

本部分介绍您可能已在 Container Registry 中设置的其他功能的配置。

Pub/Sub 通知

Artifact Registry 会将更改发布到与 Container Registry 相同的 gcr 主题。如果您已经在 Artifact Registry 所在的项目中将 Pub/Sub 与 Container Registry 搭配使用,则无需进行额外配置。

如果您在单个项目中设置 Artifact Registry,则 gcr 主题可能不存在。如需查看设置说明,请参阅配置 Pub/Sub 通知

在服务边界内保护代码库

借助 VPC Service Controls,您可以为 Google 代管式服务的资源配置安全边界,并控制跨边界的数据移动。

如需查看相关说明,请参阅在服务边界内保护代码库

后续步骤