创建 Docker Hub 远程仓库
创建一个远程仓库,将其用作 Docker Hub 的代理。
准备工作
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 创建一个 Docker Hub 账号。
所需的角色
如需获得创建 Docker Hub 远程仓库所需的权限,请让管理员向您授予以下 IAM 角色:
-
如需创建远程代码库并授予对个别代码库的访问权限,请拥有项目的 Artifact Registry 管理员 (
roles/artifactregistry.admin
) 角色 -
如需创建和管理密文,请拥有项目的 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 用户名和以密钥形式保存的个人访问令牌,以便向 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 是您的 Cloud 项目的项目编号。
如需查找项目编号,请执行以下操作:
-
前往 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 个人访问令牌的密钥版本。
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
删除项目
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
后续步骤
- 了解不同的 Artifact Registry 代码库模式。
- 详细了解 Artifact Registry 远程仓库。
- 详细了解 CI/CD。