如果您目前使用 Container Registry 来管理容器映像,那么此页面将介绍如何设置标准 Artifact Registry 代码库以及使用这些代码库与使用 Container Registry 有何区别。
这些说明主要面向代码库管理员。要了解 构建、推送、拉取和部署映像有何变化 以下信息:
准备工作
在 Google Cloud 控制台中或使用以下命令启用 Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com
如果尚未安装 gcloud CLI,请安装。对于现有安装,请运行以下命令以更新 更新到最新版本:
gcloud components update
可以先了解 Artifact Registry 的价格 您就可以开始转换了
所需的角色
为了获得设置 gcr.io 代码库所需的权限, 请让管理员授予您 针对 Google Cloud 项目的以下 IAM 角色:
-
如需创建 Artifact Registry 代码库并授予对各个代码库的访问权限,请执行以下操作:
Artifact Registry 管理员 (
roles/artifactregistry.admin
) -
如需查看和管理应用于 Cloud Storage 存储桶的现有 Container Registry 配置,请执行以下操作:
存储空间管理员 (
roles/storage.admin
) -
如需在项目级授予代码库访问权限,请执行以下操作:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) 或包含同等权限的角色,例如 Folder Admin (roles/resourcemanager.folderAdmin
) 或 Organization Admin (roles/resourcemanager.organizationAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
概览
标准制品库是支持所有功能的常规 Artifact Registry 制品库。
为简单起见,本页面中的说明假定 Container Registry 和 Artifact Registry 位于同一个 Google Cloud 项目中。在过渡到 Artifact Registry 时,您可以继续使用这两项服务,以便可以逐步执行设置步骤并更新自动化。如果需要,您可以在单个项目中设置 Artifact Registry,并执行相同的总体步骤。
Artifact Registry 还提供 gcr.io 代码库。
这些代码库可以重定向来自现有注册表的 gcr.io
流量
复制到相应的 Artifact Registry 代码库它们提供了一些
不仅向后兼容 Container Registry
限制。不过,如果您有许多包含 gcr.io
引用的工具配置、脚本或代码,则可能需要采用更具策略性的方法来迁移到 Artifact Registry。查看具有 gcr.io 网域支持的存储库的转换文档,以帮助您做出适当的决策。
过渡步骤
本指南将为您介绍如何完成以下步骤:
- 为容器创建 Docker 代码库。您必须先创建一个代码库,然后才能向其推送映像。
- 授予对代码库的权限。
- 配置身份验证,以便您能够连接新的代码库。
- 如果需要,请从要用于新代码库的 Container Registry 中复制映像。
- 尝试推送和拉取容器。
- 尝试将映像部署到运行时环境。
- 配置其他功能。
- 转换完成后,清理 Container Registry 中的映像 。
创建代码库
如果您之前从未在多区域位置推送过映像,Container Registry 会自动在多区域位置创建一个存储分区。
在 Artifact Registry 中,您必须先创建代码库,然后才能上传映像。创建代码库时,您必须指定:
- 代码库格式。Artifact Registry 将容器存储在 Docker 代码库中。
单区域级或多区域级 location。
为 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 角色来控制访问权限。 Artifact Registry 有自己的 IAM 角色与这些角色相互独立 读取、写入和存储库管理员角色。 Container Registry
如需快速将对存储桶授予的现有权限映射到建议的 Artifact Registry 角色,请使用角色映射工具。
或者,您也可以使用 Google Cloud 控制台查看有权访问存储桶的主体列表。
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击您要查看的注册表主机的存储桶。 在存储桶名称中,
PROJECT-ID
是您的 Google Cloud 项目 ID。- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
- gcr.io:
点击权限标签页。
在“权限”标签页中,点击按角色查看子标签页。
展开某个角色即可查看拥有该角色的主账号。
该列表包含直接在存储桶上授予的 IAM 角色以及从父级项目继承的角色。根据角色,您可以选择要授予的最合适的 Artifact Registry 角色。
- Cloud Storage 和基本角色
授予当前访问 Container Registry 的用户和服务账号 以及访问 Artifact Registry 代码库的权限对于从父级项目继承的 Cloud Storage 角色,您应验证主体当前是否使用 Container Registry。某些主体可能只能访问与 Container Registry 无关的其他 Cloud Storage 存储桶。
在引入 IAM 之前就已存在的基本角色 Owner、Editor 和 Viewer 对存储桶的访问权限有限。它们本身并不具有名称所授予的 Cloud Storage 资源的所有访问权限,也不会为其他 Google Cloud 服务提供额外的权限。确认哪些用户和服务账号需要访问 Artifact Registry,并使用角色映射表格来帮助您授予适当的角色(如果适合授予 Artifact Registry 访问权限)。
下表根据预定义 Cloud Storage 角色为 Container Registry 访问权限授予的权限,对 Artifact Registry 角色进行了映射。Artifact Registry 角色可提供一些不可行的额外权限分离 预定义 Cloud Storage 角色所需的资源。
所需的访问权限 当前角色 Artifact Registry 角色 在哪里授予角色 仅拉取映像(只读) 存储对象查看者
(roles/storage.objectViewer
)Artifact Registry 读取者
(roles/artifactregistry.reader)
Artifact Registry 制品库或 Google Cloud 项目 推送和拉取映像(读取和写入) 存储空间旧存储分区写入者
(roles/storage.legacyBucketWriter
)Artifact Registry Writer
(roles/artifactregistry.writer)
Artifact Registry 代码库或 Google Cloud 项目 推送、拉取和删除映像 Storage Legacy Bucket Writer
(roles/storage.legacyBucketWriter
)Artifact Registry Repository Administrator
(roles/artifactregistry.repoAdmin)
Artifact Registry 代码库或 Google Cloud 项目 创建、管理和删除代码库 Storage Admin
(roles/storage.admin
)Artifact Registry 管理员
(roles/artifactregistry.Admin)
Google Cloud 项目 - 从项目继承的服务代理角色
Google Cloud 服务的默认服务账号有自己的专属账号 在项目级授予的角色。例如,Cloud Run 的服务代理具有 Cloud Run Service Agent 角色。
在大多数情况下,这些服务代理角色对 Container Registry 和 Artifact Registry 具有等效的默认权限,如果您在现有 Container Registry 服务所在的项目中运行 Artifact Registry,则无需进行任何其他更改。
如需详细了解服务代理角色中的权限,请参阅服务代理角色参考文档。
- 自定义角色
您可以使用角色映射表,根据用户或服务账号所需的访问权限级别,确定要向其授予的角色。
如需了解如何授予 Artifact Registry 角色,请参阅 配置角色和权限。
向代码库进行身份验证
Artifact Registry 支持与 Container Registry 使用相同的身份验证方法。
如果您使用的是 Docker 凭据帮助程序:
- 您必须使用 2.0 或更高版本与 Artifact Registry 代码库进行交互。GitHub 中提供了独立版本。
- 您必须使用打算使用的 Artifact Registry 位置配置凭据帮助程序。默认情况下,凭据帮助程序仅配置对 Container Registry 主机的访问权限。
如需详细了解如何设置身份验证,请参阅为 Docker 设置身份验证。
从 Container Registry 中复制容器
如果 Container Registry 中存在您希望继续在 Artifact Registry 中使用的容器,您可以通过多种方法复制这些容器。对于 请查看 从 Container Registry 复制映像
推送和拉取映像
您在 Artifact Registry 中用于标记、推送和拉取映像的 Docker 命令类似于您在 Container Registry 中使用的命令。主要有两个区别:
- Artifact Registry Docker 代码库的主机名包含位置前缀,后跟
-docker.pkg.dev
。例如australia-southeast1-docker.pkg.dev
、europe-north1-docker.pkg.dev
和europe-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 集成的服务账号会配置同一项目中代码库的默认权限。
通常情况下,使用 Cloud Build 构建映像并将其推送到代码库的运作方式与 Container Registry 中的运作方式相同。在 Artifact Registry 中,主要区别在于目标代码库必须存在,您才能将映像推送到其中(包括您要推送的第一个映像)。
请务必在运行用于推送映像的命令(包括 Docker 命令 docker push
和 Cloud Build 命令 gcloud builds submit
)之前先创建所需的代码库。
Cloud Build 构建器仍托管在 gcr.io
上。如需了解详情,请参阅与 Cloud Build 集成。
其他功能
本部分介绍您可能已在 Container Registry 中设置的其他功能的配置。
Artifact Analysis
Artifact Analysis 同时支持 Container Registry 和 Artifact Registry。 Artifact Analysis 文档包含这两款产品。
- 这两个产品使用相同的 Artifact Analysis API。在 Container Registry 或 Artifact Registry 中启用 Artifact Analysis API 后,这两个产品都会启用 Artifact Analysis API。
- 这两个产品都对 Artifact Analysis 通知使用相同的 Pub/Sub 主题。
- 您可以继续使用 gcloud container images 命令列出与
gcr.io
映像路径相关的备注和出现情况。
Container Registry | Artifact Registry |
---|---|
通过按需扫描扫描操作系统和语言包漏洞
在具有受支持操作系统的映像中运行。自动扫描仅返回操作系统
和漏洞信息
详细了解扫描类型。
|
通过按需和按需扫描,扫描操作系统和语言软件包漏洞
自动扫描。
详细了解
扫描。
|
Pub/Sub 通知
Artifact Registry 会将更改发布到与 Container Registry 相同的 gcr
主题。如果您已经在 Artifact Registry 所在的项目中将 Pub/Sub 与 Container Registry 搭配使用,则无需进行额外配置。
如果您在单个项目中设置 Artifact Registry,则 gcr
主题可能不存在。如需查看设置说明,请参阅配置 Pub/Sub 通知。
服务边界
借助 VPC Service Controls,您可以为 Google 代管式服务的资源配置安全边界,并控制跨边界的数据移动。
如需查看相关说明,请参阅在服务边界内保护代码库。
清理 Container Registry 映像
当您准备好停止使用 Container Registry 时,请删除剩余的 删除 Container Registry 的存储分区来启动映像
如需删除每个 Container Registry 存储桶,请执行以下操作:
控制台
- 前往 Google Cloud 控制台中的 Cloud Storage 页面。
选择要删除的存储桶。在存储桶名称中
PROJECT-ID
是您的 Google Cloud 项目 ID。- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
- gcr.io:
点击删除。系统会显示一个确认对话框。
如需确认删除,请输入存储桶名称,然后点击删除。
gcloud
如果您要批量删除存储桶中的十万个或更多图片,请避免使用 gcloud CLI,因为删除过程需要很长时间才能完成。使用 Google Cloud 控制台执行操作 。如需了解详情,请参阅批量删除 Cloud Storage 对象。
如需删除存储桶,请使用带有 --recursive
标志的 gcloud storage rm
命令。
gcloud storage rm gs://BUCKET-NAME --recursive
将 BUCKET-NAME
替换为 Container Registry 存储
存储桶名称。在存储桶名称中,PROJECT-ID
是您的 Google Cloud 项目 ID。
- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
响应如下例所示:
Removing gs://artifacts.my-project.appspot.com/...
如果有其他 Google Cloud 服务在同一 Google Cloud 项目中运行,请让 Container Registry API 保持启用状态。如果您尝试停用 Container Registry API。如果项目中启用了具有已配置依赖项的其他服务,Container Registry 会显示一条警告。停用 Container Registry API 会自动停用同一项目中具有已配置依赖项的所有服务,即使您目前未将这些服务与 Container Registry 搭配使用也是如此。
后续步骤
- 试用 Docker 快速入门。