建立 Docker Hub 遠端存放區
建立遠端存放區,做為 Docker Hub 的 Proxy。
事前準備
- 登入 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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init - 建立 Docker Hub 帳戶。
必要的角色
如要取得建立 Docker Hub 遠端存放區所需的權限,請要求管理員授予您下列 IAM 角色:
-
如要建立遠端存放區並授予個別存放區的存取權:
專案的 Artifact Registry 管理員 (
roles/artifactregistry.admin) -
如要建立及管理密鑰:
專案的Secret Manager 管理員角色 (
roles/secretmanager.admin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
選擇殼層
如要完成本快速入門導覽課程,請使用 Cloud Shell 或本機殼層。
- Cloud Shell
- Cloud Shell 是殼層環境,用於管理託管在 Google Cloud上的資源。這個環境已預先安裝 Docker 和 Google Cloud 的主要指令列介面:Google Cloud CLI。 Google Cloud
- 本機殼層
- 如果您想要使用本機殼層,就必須在環境中安裝 Docker 和 gcloud CLI。
啟動 Cloud Shell
請執行下列步驟來啟動 Cloud Shell:
前往 Google Cloud 控制台。
按一下「Activate Cloud Shell」(啟用 Cloud Shell) 按鈕:
。
此時 Cloud Shell 工作階段會在主控台底部的頁框中開啟,您可以使用這個殼層來執行 gcloud 指令。
設定本機殼層
如要安裝 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 的文字檔。
將個人存取權杖儲存為密鑰
主控台
-
前往 Google Cloud 控制台的「Secret Manager」頁面。
-
在「Secret Manager」(密鑰管理員) 頁面中,按一下「Create Secret」(建立密鑰)。
-
在「建立密鑰」頁面的「名稱」下方,將密鑰命名為
my-secret。 -
在「Secret value」(密鑰值) 欄位中,輸入 Docker Hub 個人存取權杖。
-
請勿變更「區域」部分。
-
按一下「建立密鑰」按鈕。
gcloud CLI
gcloud secrets create my-secret --data-file="/path/to/file.txt"
其中 /path/to/file.txt 是指包含個人存取權杖的文字檔位置。
授予 Artifact Registry 服務帳戶存取密鑰的權限
主控台
-
前往 Google Cloud 控制台的「Secret Manager」頁面。
-
在「Secret Manager」頁面中,按一下
my-secret旁邊的核取方塊。 -
若面板尚未開啟,請按一下「Show Info Panel」(顯示資訊面板) 以開啟面板。
-
在資訊面板中,按一下「Add Principal」(新增主體)。
-
在「新增主體」文字區域中,輸入 Artifact Registry 服務帳戶的電子郵件地址。Artifact Registry 服務帳戶電子郵件地址的格式如下
service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
其中 PROJECT-NUMBER 是您的專案編號。
如要找出專案編號,請按照下列步驟操作:
-
前往 Google Cloud 控制台的「資訊主頁」頁面。
-
按一下頁面頂端的「Select from」下拉式清單。
-
在隨即顯示的「Select from」視窗中,選取所需專案。
專案資訊主頁的「Project info」(專案資訊) 卡片會顯示專案 ID 和專案編號。
-
-
在「Select a role」(請選擇角色) 下拉式選單中,依序選擇「Secret Manager」和「Secret Manager Secret Accessor」(Secret Manager 密鑰存取者)。
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 控制台的「資訊主頁」頁面。
-
按一下頁面頂端的「Select from」下拉式清單。
-
在隨即顯示的「Select from」視窗中,選取所需專案。
專案資訊主頁的「Project info」(專案資訊) 卡片會顯示專案 ID 和專案編號。
建立遠端存放區
執行下列指令,在 us-central1 位置建立名為 quickstart-docker-hub-remote 的 Artifact Registry 遠端存放區,並提供 Docker Hub 憑證:
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是存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list指令。"Remote Docker repository"是存放區的選用說明。 請勿加入私密資料,因為存放區說明不會經過加密。"Docker Hub"是這個遠端存放區的外部存放區設定說明 (選用)。DOCKER-HUB會將遠端存放區上游設定為公開 Docker Hub 上游。- USERNAME 是您的 Docker Hub 使用者名稱。
projects/PROJECT/secrets/my-secret/versions/1是您建立的 Secret 版本,用於儲存 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 控制台中開啟「Repositories」(存放區) 頁面。
在存放區清單中,選取
quickstart-docker-hub-remote存放區。點選「刪除」。
gcloud
如要刪除 quickstart-docker-hub-remote 存放區,請執行下列指令:
gcloud artifacts repositories delete quickstart-docker-hub-remote \ --location=us-central1
刪除專案
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
後續步驟
- 瞭解不同的 Artifact Registry 存放區模式。
- 進一步瞭解 Artifact Registry 遠端存放區。
- 進一步瞭解 CI/CD。