创建 Docker Hub 远程代码库

创建远程代码库以充当 Docker Hub 的代理。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Artifact Registry, Secret Manager API。

    启用 API

  5. 安装 Google Cloud CLI。
  6. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  7. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  8. 确保您的 Google Cloud 项目已启用结算功能

  9. 启用 Artifact Registry, Secret Manager API。

    启用 API

  10. 安装 Google Cloud CLI。
  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 创建一个 Docker Hub 帐号。

所需的角色

如需获取创建 Docker Hub 远程代码库所需的权限,请让管理员向您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

选择 shell

如需完成本快速入门,请使用 Cloud Shell 或本地 shell。

Cloud Shell
Cloud Shell 是一种 shell 环境,用于管理托管在 Google Cloud 上的资源。它预安装有 Docker 和 Google Cloud CLI,这是 Google Cloud 的主要命令行界面。
本地 shell
如果您更喜欢使用本地 shell,则必须在您的环境中安装 Docker 和 gcloud CLI。

启动 Cloud Shell

如需启动 Cloud Shell,请执行以下步骤:

  1. 转到 Google Cloud 控制台。

    Google Cloud 控制台

  2. 点击激活 Cloud Shell 按钮:

控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloud 命令。

设置本地 shell

如需安装 gcloud CLI 和 Docker,请执行以下步骤:

  1. 安装 gcloud CLI。如需更新现有安装,请运行命令 gcloud components update

  2. 安装 Docker(如果尚未安装)。

  3. Docker 需要特别访问权限才能与注册表进行交互。 在 Linux 或 Windows 上,将您用于运行 Docker 命令的用户添加到 Docker 安全群组。在 macOS 上,不需要执行此步骤,因为 Docker Desktop 以根用户身份在虚拟机上运行。

    Linux

    Docker 安全群组称为 docker。 如需添加用户名,请运行以下命令:

    sudo usermod -a -G docker ${USER}
    

    Windows

    Docker 安全群组称为 docker-users。 如需从管理员命令提示符添加用户,请运行以下命令:

    net localgroup docker-users DOMAIN\USERNAME /add
    

    其中

    • DOMAIN 是您的 Windows 网域。
    • USERNAME 是您的用户名。
  4. 退出并重新登录以使群组成员资格变更生效。如果您使用的是虚拟机,则可能需要重启虚拟机才能使成员资格变更生效。

  5. 若要确保 Docker 正在运行,请运行以下 Docker 命令,该命令返回当前时间和日期:

    docker run --rm busybox date
    

    --rm 标志表示会在退出时删除容器实例。

配置 Docker Hub 身份验证

为防止使用未经身份验证的 Docker Hub 配额,我们建议您在使用远程代码库时向 Docker Hub 进行身份验证。您可以使用远程代码库添加 Docker Hub 用户名和以密钥形式保存的个人访问令牌,以便向 Docker Hub 进行身份验证。

创建 Docker Hub 个人访问令牌

  1. 登录 Docker Hub
  2. 创建具有只读权限的个人访问令牌
  3. 复制访问令牌。

  4. 在本地或 Cloud Shell 中以文本文件的形式保存访问令牌。

将您的个人访问令牌保存在 Secret 中

控制台

  1. 转到 Google Cloud 控制台中的 Secret Manager 页面。

    转到 Secret Manager 页面

  2. Secret Manager 页面上,点击创建密钥

  3. 创建 Secret 页面的名称下,将您的 Secret 命名为 my-secret

  4. Secret value 字段中,输入您的 Docker Hub 个人访问令牌。

  5. 保持区域部分不变。

  6. 点击创建密钥按钮。

gcloud CLI

gcloud secrets create my-secret --data-file="/path/to/file.txt"

其中,/path/to/file.txt 是包含您的个人访问令牌的文本文件的位置。

向 Artifact Registry 服务帐号授予对密钥的访问权限

控制台

  1. 转到 Google Cloud 控制台中的 Secret Manager 页面。

    转到 Secret Manager 页面

  2. Secret Manager 页面上,点击 my-secret 旁边的复选框。

  3. 如果面板尚未打开,请点击显示信息面板以打开面板。

  4. 在信息面板中,点击添加主账号

  5. 新的主账号文本区域中,输入 Artifact Registry 服务帐号的电子邮件地址。Artifact Registry 服务帐号电子邮件地址的格式如下

    service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

    其中,PROJECT-NUMBER 是您的项目编号。

    如需查找您的项目编号,请按以下步骤操作:

    • 前往 Google Cloud 控制台中的信息中心页面

      转到“信息中心”页面

    • 点击页面顶部的请选择:下拉列表。

    • 在随即显示的请选择:窗口中,选择您的项目。

      项目 ID 和项目编号会显示在项目信息中心的项目信息卡片上。

  6. 选择角色下拉列表中,选择 Secret Manager,然后选择 Secret Manager Secret Accessor

gcloud CLI

gcloud secrets add-iam-policy-binding my-secret \
    --member="serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

其中,PROJECT-NUMBER 是您的项目编号。

如需查找您的项目编号,请按以下步骤操作:

  • 前往 Google Cloud 控制台中的信息中心页面

    转到“信息中心”页面

  • 点击页面顶部的请选择:下拉列表。

  • 在随即显示的请选择:窗口中,选择您的项目。

    项目 ID 和项目编号会显示在项目信息中心的项目信息卡片上。

创建远程代码库

运行以下命令,使用您的 Docker Hub 凭据在位置 us-central1 中创建一个名为 quickstart-docker-hub-remote 的 Artifact Registry 远程代码库:

gcloud artifacts repositories create quickstart-docker-hub-remote \
    --project=PROJECT_ID \
    --repository-format=DOCKER  \
    --location=us-central1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-docker-repo=DOCKER-HUB \
    --remote-username=USERNAME \
    --remote-password-secret-version=projects/PROJECT/secrets/my-secret/versions/1

其中:

  • quickstart-docker-hub-remote 是代码库的名称。对于项目中的每个代码库位置,代码库名称必须是唯一的。
  • PROJECT_ID 是项目 ID。如果省略此标志,则系统会使用当前项目或默认项目。
  • us-central1 是代码库的单区域或多区域位置。如果您设置默认值,则可以省略此标志。如需查看受支持位置的列表,请运行命令 gcloud artifacts locations list
  • "Remote Docker repository" 是代码库的可选说明。请勿包含敏感数据,因为代码库说明不会加密。
  • "Docker Hub" 是此远程代码库的外部代码库配置的可选说明。
  • DOCKER-HUB 将远程仓库设置为上游公共 Docker Hub 的上游。
  • USERNAME 是您的 Docker Hub 用户名。
  • projects/PROJECT/secrets/my-secret/versions/1 是您为了存储 Docker Hub 个人访问令牌而创建的 Secret 版本。

Artifact Registry 会创建代码库并将其添加到代码库列表中。

配置 Docker 身份验证

在推送或拉取映像之前,请先配置 Docker 以使用 Google Cloud CLI 对向 Artifact Registry 发出的请求进行身份验证。

  1. 以将会运行 Docker 命令的用户身份登录 gcloud CLI。

    gcloud auth login
    
  2. 如需为区域 us-central1 中的 Docker 代码库设置身份验证,请运行以下命令:

    gcloud auth configure-docker us-central1-docker.pkg.dev
    

    该命令将更新您的 Docker 配置。现在,您可以在 Google Cloud 项目中与 Artifact Registry 连接以推送和拉取映像。

如需了解其他身份验证方法,请参阅身份验证方法

将映像拉取到远程代码库

  1. 以将会运行 Docker 命令的用户身份登录 gcloud CLI。

    gcloud auth login
    
  2. 将映像从 Docker Hub 拉取到您的机器上,然后使用以下命令将其导入远程仓库:

    docker pull us-central1-docker.pkg.dev/PROJECT/quickstart-docker-hub-remote/busybox:latest
    

    其中:

    • us-central1 是远程代码库位置。
    • us-central1-docker.pkg.dev 是您创建的 Docker 代码库的主机名。
    • PROJECT 是您的 Google Cloud 项目 ID。如果您的项目 ID 包含英文冒号 (:),请参阅网域级项目
    • quickstart-docker-hub-remote 是您创建的代码库的 ID。
    • busybox 是您要从 Docker Hub 拉取到 quickstart-docker-hub-remote 的映像的名称。
    • latest 是您要从 Docker Hub 拉取的已标记映像版本。

    该映像被拉取到您的机器上并缓存在远程代码库中。 如果您再次拉取同一标记的映像,则该映像将从远程仓库中提取。系统会使用您的 Docker Hub 凭据。

  3. 列出存储在远程仓库中的工件:

    gcloud artifacts packages list \
        --location=us-central1 \
        --repository=quickstart-docker-hub-remote
    

    输出类似以下内容:

    Listing items under project my-project, location us-central1, repository quickstart-docker-hub-remote.
    
    PACKAGE: busybox
    CREATE_TIME: 2023-06-19T18:59:09
    UPDATE_TIME: 2023-06-19T18:59:10
    

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

删除代码库

如果您希望保留项目而仅删除代码库资源,请按照本部分中的步骤操作。如果要删除整个项目,请按照删除项目中的步骤操作。

在移除代码库之前,请确保您要保留的任何映像在其他位置提供。

如需删除代码库,请执行以下操作:

控制台

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

  2. 在代码库列表中,选择 quickstart-docker-hub-remote 代码库。

  3. 点击删除

gcloud

如需删除 quickstart-docker-hub-remote 代码库,请运行以下命令:

gcloud artifacts repositories delete quickstart-docker-hub-remote \
    --location=us-central1

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤