推送和拉取映像

本页面介绍如何推送和拉取映像,这是使用 Container Registry 时的两项最常见任务。如需将新映像推送到 Container Registry,您首先需要使用注册表名称来标记该映像,如下所述。

要开始使用 Container Registry,请参阅快速入门

如需了解如何列出、标记和删除映像,请参阅管理映像

准备工作

确保您已具备以下条件:

  1. 为您的项目启用结算功能

  2. 启用 Container Registry API

  3. 安装了最新版本的 Cloud SDK,其中包括 gcloud 命令行工具

  4. 已经安装 Docker。 如果您要使用 gcloud 凭据帮助程序进行身份验证,则需要安装版本 18.03 或更高版本的 Docker 客户端(推荐)。

    如果您使用的是基于 Linux 的操作系统(例如 Ubuntu 或 Debian),请将您的用户名添加到 docker 群组,这样您就可以在不使用 sudo 的情况下运行 Docker:

    sudo usermod -a -G docker ${USER}

    退出并重新登录以使群组成员资格变更生效。如果您使用的是虚拟机,则可能需要重启虚拟机才能使成员资格变更生效。

  5. 具有从注册表推送和拉取的权限

  6. 已经将 Docker 配置为使用 gcloud 作为凭据帮助程序,或使用其他身份验证方法。如需使用 gcloud 作为凭据帮助程序,请运行以下命令:

    gcloud auth configure-docker
    
  7. Docker 要求凭据帮助程序位于系统 PATH 中。确保您选择的凭据帮助程序 gclouddocker-credential-gcr 位于系统 PATH

将映像推送到注册表

要将任何本地映像推送到 Container Registry,您首先需要使用注册表名称标记该映像,然后再进行推送。

使用注册表名称标记本地映像

  1. 确定注册表名称:

    1. 选择一个主机名,以指定映像的存储位置。

      • gcr.io 在美国的数据中心托管映像,但该位置未来可能会发生变化
      • us.gcr.io 在美国的数据中心托管映像,使用的存储分区与 gcr.io 托管的映像不同
      • eu.gcr.io 在欧盟托管映像
      • asia.gcr.io 在亚洲的数据中心托管映像

      这些位置对应于 Cloud Storage 存储分区的多区域位置。如果您将映像推送到使用新主机名的注册表,Container Registry 会在指定的多区域位置中创建一个存储分区。该存储分区是注册表的底层存储空间。在项目中,所有使用相同主机名的注册表都共用一个存储分区。

      在控制台中,映像的主机名将列在位置下。

    2. 选择一个映像名称,该名称可能与本地机器上的映像名称不同。

    3. 将主机名、Google Cloud Console 项目 ID 和映像名称组合在一起:

      [HOSTNAME]/[PROJECT-ID]/[IMAGE]
      

      如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目

  2. 运行以下命令以使用注册表名称标记本地映像:

    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]
    

    其中 [SOURCE_IMAGE] 是本地映像名称或映像 ID。

    此命令会使用注册表名称命名映像并应用 latest 标记。如果要应用其他标记,请使用以下命令:

    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

将带有标记的映像推送到 Container Registry

Docker 凭据帮助程序是将 Docker 配置为直接进行 Container Registry 身份验证的最简单的方法。然后使用 docker 命令对映像进行标记、推送和拉取。或者,您可以使用客户端库管理容器映像,也可以直接与 Docker API 进行交互。

如需将带有标记的映像推送到 Container Registry,请使用以下命令:

docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]

此命令将推送带有 latest 标记的映像。如果要推送带有不同标记的映像,请使用以下命令:

docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

如果您将映像推送到使用新主机名的注册表,Container Registry 会在指定的多区域位置中创建一个存储分区。推送您的映像后,您可以执行以下操作:

  • 转到 Cloud Console 以查看注册表和映像。

  • 运行 gcloud container images list-tags 来查看映像的标记和自动生成的摘要:

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

    此命令的输出类似如下所示:

    DIGEST        TAGS        TIMESTAMP
    44bde...      test        2017-..-..
    

从注册表中拉取映像

要从 Container Registry 中拉取映像,请使用以下命令:

docker pull [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

docker pull [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

其中:

  • [HOSTNAME] 列在控制台的位置下方。可以是以下四个选项之一:gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io
  • [PROJECT-ID] 是您的 Google Cloud Console 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
  • [IMAGE] 是 Container Registry 映像的名称。
  • [TAG] 是应用于映像的标记。在注册表中,每个映像的标记各不相同。
  • [IMAGE_DIGEST] 是映像内容的 sha256 哈希值。在控制台中,点击特定映像可查看其元数据。此摘要将被列为映像摘要

要获取特定映像的拉取命令,请执行以下操作:

  1. 点击映像名称以转至特定注册表。

  2. 在该注册表中,选中要拉取的映像版本旁边的复选框。

  3. 点击页面顶部的显示拉取命令

  4. 复制拉取命令,以此使用标记或摘要标识映像。

后续步骤