创建 Docker Hub 远程制品库
创建远程代码库以充当 Docker Hub 的代理。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init - 创建 Docker Hub 账号。
所需的角色
如需获得创建 Docker Hub 远程代码库所需的权限,请让管理员向您授予以下 IAM 角色:
-
如需创建远程代码库并授予对个别代码库的访问权限,您需要拥有项目的 Artifact Registry Administrator (
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,请执行以下步骤:
前往 Google Cloud 控制台。
点击激活 Cloud Shell 按钮:
。
控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloud 命令。
设置本地 shell
如需安装 gcloud CLI 和 Docker,请执行以下步骤:
安装 gcloud CLI。如需更新现有安装,请运行命令
gcloud components update。安装 Docker(如果尚未安装)。
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 是您的用户名。
退出并重新登录以使群组成员资格变更生效。如果您使用的是虚拟机,则可能需要重启虚拟机才能使成员资格变更生效。
若要确保 Docker 正在运行,请运行以下 Docker 命令,该命令返回当前时间和日期:
docker run --rm busybox date--rm标志表示会在退出时删除容器实例。
配置 Docker Hub 身份验证
为了防止使用未经身份验证的 Docker Hub 配额,我们建议您在使用远程代码库时向 Docker Hub 进行身份验证。借助远程代码库,您可以添加 Docker Hub 用户名和以 Secret 形式保存的个人访问令牌,以便向 Docker Hub 进行身份验证。
创建 Docker Hub 个人访问令牌
- 登录 Docker Hub。
- 创建具有只读权限的个人访问令牌。
复制访问令牌。
将访问令牌保存在本地或 Cloud Shell 中的文本文件中。
将个人访问令牌保存在 Secret 中
控制台
-
前往 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击创建密钥。
-
在创建 Secret 页面的名称下,将 Secret 命名为
my-secret -
在 Secret 值字段中,输入您的 Docker Hub 个人访问令牌。
-
保持区域部分不变。
-
点击创建密钥按钮。
gcloud CLI
gcloud secrets create my-secret --data-file="/path/to/file.txt"
其中,/path/to/file.txt 是包含您的个人访问令牌的文本文件的位置。
授予 Artifact Registry 服务账号对您的 Secret 的访问权限
控制台
-
前往 Google Cloud 控制台中的 Secret Manager 页面。
-
在 Secret Manager 页面上,点击
my-secret旁边的复选框。 -
如果面板尚未打开,请点击显示信息面板以打开面板。
-
在信息面板中,点击添加主账号。
-
在新主账号文本区域中,输入 Artifact Registry 服务账号的电子邮件地址。Artifact Registry 服务账号电子邮件地址的格式如下所示
service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
其中,PROJECT-NUMBER 是您的项目编号。
如需查找项目编号,请执行以下操作:
-
前往 Google Cloud 控制台中的信息中心页面。
-
点击页面顶部的请选择:下拉列表。
-
在随即显示的请选择:窗口中,选择您的项目。
项目信息中心的项目信息卡片会显示项目 ID 和项目编号。
-
-
在选择角色下拉列表中,选择 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 中创建一个名为 quickstart-docker-hub-remote 且包含 Docker Hub 凭据的 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 发出的请求进行身份验证。
以将运行 Docker 命令的用户身份登录 gcloud CLI。
gcloud auth login如需为区域
us-central1中的 Docker 代码库设置身份验证,请运行以下命令:gcloud auth configure-docker us-central1-docker.pkg.dev该命令将更新您的 Docker 配置。现在,您可以在 Google Cloud 项目中与 Artifact Registry 连接以推送和拉取映像。
如需了解其他身份验证方法,请参阅身份验证方法。
将映像拉取到远程代码库中
以将运行 Docker 命令的用户身份登录 gcloud CLI。
gcloud auth login使用以下命令将映像从 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 凭据。
列出存储在远程代码库中的制品:
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 账号产生费用,请按照以下步骤操作。
删除仓库
如果您想保留项目,只删除代码库资源,请按照本部分中的步骤操作。如果您想删除整个项目,请按照删除项目中的步骤操作
在移除代码库之前,请确保您要保留的任何映像在其他位置提供。
如需删除代码库,请执行以下操作:
控制台
在 Google Cloud 控制台中打开代码库页面。
在代码库列表中,选择
quickstart-docker-hub-remote代码库。点击删除。
gcloud
如需删除 quickstart-docker-hub-remote 代码库,请运行以下命令:
gcloud artifacts repositories delete quickstart-docker-hub-remote \ --location=us-central1
删除项目
- 在 Google Cloud 控制台中,前往管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
后续步骤
- 了解不同的 Artifact Registry 代码库模式。
- 详细了解 Artifact Registry 远程代码库。
- 详细了解 CI/CD。