创建 Docker Hub 远程仓库

创建一个远程仓库,将其用作 Docker Hub 的代理。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Secret Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry, Secret Manager APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 创建 Docker Hub 账号。

所需的角色

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

  • 如需创建远程代码库并授予对各个代码库的访问权限,请执行以下操作: Artifact Registry 管理员 (roles/artifactregistry.admin) 针对项目
  • 如需创建和管理 Secret,请执行以下操作: Secret Manager Admin 角色 (roles/secretmanager.admin) 针对项目

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

选择 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 以 root 用户身份在虚拟机上运行,因此无需执行此步骤。

    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. 创建密钥页面的名称下,将您的密钥命名为 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 服务账号授予对 Secret 的访问权限

控制台

  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 和项目编号显示在项目信息中心的项目信息卡片上。

创建远程仓库

创建一个名为 位置 us-central1 中具有您的 Docker Hub 的 quickstart-docker-hub-remote 创建凭据:

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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤