管理映像

管理映像包括列出代码库中的映像、添加标记、删除标记、将映像复制到新代码库以及删除映像。

如需了解如何将本地映像推送到 Container Registry 或拉取 Container Registry 中存储的映像,请参阅推送和拉取映像

准备工作

确保您已具备以下条件:

  1. 在您的项目中启用 Container Registry

  2. 已经安装 Docker

  3. 已配置 Docker,以向注册表进行身份验证。

  4. 拥有注册表的访问权限

按映像存储位置列出映像

您可以使用 Google Cloud 控制台或命令行。

控制台

要列出您的某个主机位置中的映像,请执行以下操作:

  1. 转到 Container Registry 页面。

    打开 Container Registry 页面

  2. 使用名称上方的选择器选择主机位置。选项包括所有位置和项目当前使用的主机名,这可能包括 gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io

gcloud

如需列出您的某个主机位置中的映像,请使用以下命令:

gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]

其中:

  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud 控制台 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目

如果存在嵌套注册表,请指定嵌套映像存储所在的代码库层级以列出这些映像:

gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]/[IMAGE]

其中 [IMAGE] 是用于嵌套更多映像的代码库。

另请参阅 gcloud container images list 文档。

列出映像的版本

注册表可以包含映像的不同版本。这些版本具有相同的映像名称,并且通过其摘要和标记进行标识。

控制台

如需查看映像的摘要和标记,请执行以下操作:

  1. 转到 Container Registry 页面。

    打开 Container Registry 页面

  2. 点击映像名称即可查看该映像的版本。 被截短的摘要列在名称下,而标记列在标记下。

  3. 要获取完整摘要,请点击映像版本以查看其元数据。此摘要称为映像摘要

gcloud

如需列出映像的被截短摘要和标记,请运行以下命令:

gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]

其中:

  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud 控制台 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。

要列出特定映像的一个或多个版本的完整摘要,请运行以下命令:

gcloud container images list-tags --format='get(digest)' [HOSTNAME]/[PROJECT-ID]/[IMAGE]

请参阅 gcloud container images list-tags 文档。

标记映像

您可以使用 Google Cloud 控制台或以下命令为映像添加标记: 行。

摘要是为映像版本自动生成的唯一标识符。标记充当标签,可应用于映像的特定版本。

您可以为一个映像添加多个标记。在代码库中,映像的每个标记都必须唯一。例如,如果您将 release-candidate 标记添加到映像的第九个版本中,将同一标记添加到第十个版本会将该标记从第九个版本移到第十个版本。

如果您没有标记映像,Docker 客户端将添加默认标记 latest。这意味着 latest 不表示映像的最新版本。而是表示明确标记为 latest 的映像版本或映像未标记的最新版本。由于 latest 的含义不明确,因此我们建议您避免依赖 latest 标记。

控制台

要标记由 Container Registry 托管的映像,请执行以下操作:

  1. 转到 Container Registry 页面。

    打开 Container Registry 页面

  2. 点击映像名称即可查看该映像的版本。

  3. 标记下,点击修改图标。

  4. 在字段中输入新标记,然后点击保存

gcloud

如需标记由 Container Registry 托管的映像,请使用 gcloud container images add-tag 命令:

gcloud container images add-tag \
[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG] \
[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[NEW_TAG]

gcloud container images add-tag \
[HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST] \
[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[NEW_TAG]

其中:

  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud 控制台 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是已应用于映像的标记。
  • [IMAGE_DIGEST] 是映像内容的 sha256 哈希值。
  • [NEW_TAG] 是您要为映像添加的新标记。

如需详细了解此命令,请参阅 gcloud container images add-tag

标记本地映像以在 Container Registry 上托管

要将任何本地映像推送到 Container Registry,您首先需要使用注册表名称标记该映像,然后再进行推送。如需查看相关说明,请参阅将映像推送到注册表

取消对映像的标记

您可以使用 Google Cloud 控制台或命令行。

控制台

  1. 转到 Container Registry 页面。

    打开 Container Registry 页面

  2. 点击映像名称即可查看该映像的版本。

  3. 标记下,点击修改图标。

  4. 删除标记,然后点击保存

gcloud

如需移除映像的标记,请使用以下命令:

gcloud container images untag [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] 是您要移除的标记。

    如需详细了解此命令,请参阅 gcloud container images untag

将映像复制到新注册表

您可以使用命令行将映像从一个代码库复制到另一个代码库。您必须拥有这两个代码库的访问权限。

如需将某个映像从一个代码库复制到另一个代码库,请使用 gcloud container images add-tag 命令,并通过映像的标记来标识要移动的映像,具体命令分别如下所示:

gcloud container images add-tag \
[SOURCE_HOSTNAME]/[SOURCE_PROJECT-ID]/[SOURCE_IMAGE]:[SOURCE_TAG] \
[DESTINATION_HOSTNAME]/[DESTINATION_PROJECT-ID]/[DESTINATION_IMAGE]:[DESTINATION_TAG]

gcloud container images add-tag \
[SOURCE_HOSTNAME]/[SOURCE_PROJECT-ID]/[SOURCE_IMAGE]@[IMAGE_DIGEST] \
[DESTINATION_HOSTNAME]/[DESTINATION_PROJECT-ID]/[DESTINATION_IMAGE]:[DESTINATION_TAG]

其中,以下内容对于来源和目标均适用:

  • [HOSTNAME] 是映像的托管位置,可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是 Google Cloud 控制台 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [IMAGE_DIGEST] 是映像内容的 sha256 哈希值。
  • [TAG] 是标识要移动的来源映像的标记,或要对目标代码库中的映像应用的标记。

例如,如果要将映像 my-image 复制到另一个项目的代码库以及位于欧洲的主机,但是您希望保持映像名称和标记不变,则可以使用以下命令:

gcloud container images add-tag \
gcr.io/[PROJECT-ID]/my-image:tag1 \
eu.gcr.io/[OTHER-PROJECT-ID]/my-image:tag1

其中,[PROJECT-ID][OTHER-PROJECT-ID] 是您的 Google Cloud 控制台 项目 ID 以及要复制的目标项目的名称。 您必须对这两个项目中的代码库拥有访问权限。如果其中任一项目 ID 包含英文冒号 (:),请参阅网域级项目

如需详细了解此命令,请参阅 gcloud container images add-tag

删除映像

您可以使用 Google Cloud 控制台或命令行删除映像。 删除映像后,您无法撤消此操作。

还有其他工具可帮助您管理未使用的映像。例如 gcr-cleaner 工具根据不同的条件查找并删除旧图片。移除未使用的映像有助于降低存储费用。gcr-cleaner 工具不是 Google 官方产品。

如需通过 Google Cloud 控制台或 gcloud CLI 删除映像,请执行以下操作:

控制台

  1. 转到 Container Registry 页面。

    打开 Container Registry 页面

  2. 点击映像名称即可查看该映像的版本。

  3. 在注册表中,选中待删除映像的各版本旁边的复选框。

  4. 点击页面顶部的删除

  5. 删除代码库内容弹出式窗口中,点击删除

gcloud

运行下列其中一个命令:

  • 映像使用摘要标识:

    gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]
    
  • 映像使用标记标识,并且具有多个标记:

    gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG] --force-delete-tags
    

其中:

  • [HOSTNAME] 列在控制台中的 Location 下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud 控制台 项目 ID。 如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [IMAGE_DIGEST] 是映像内容的 sha256 哈希值。
  • [TAG] 是要移除的映像的标记。

如需详细了解此命令,请参阅 gcloud container images delete

后续步骤