建立 Docker Hub 遠端存放區

建立遠端存放區,做為 Docker Hub 的 Proxy。

事前準備

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

  10. Enable the Artifact Registry, Secret Manager APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 建立 Docker Hub 帳戶。
  15. 必要的角色

    如要取得建立 Docker Hub 遠端存放區所需的權限,請要求管理員授予下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

選擇殼層

如要完成本快速入門導覽課程,請使用 Cloud Shell 或本機殼層。

Cloud Shell
Cloud Shell 是殼層環境,用於管理託管在 Google Cloud上的資源。這個環境已預先安裝 Docker 和 Google Cloud 的主要指令列介面:Google Cloud CLI。 Google Cloud
本機殼層
如果您想要使用本機殼層,就必須在環境中安裝 Docker 和 gcloud CLI。

啟動 Cloud Shell

請執行下列步驟來啟動 Cloud Shell:

  1. 前往 Google Cloud 控制台。

    Google Cloud console

  2. 按一下「Activate Cloud Shell」(啟用 Cloud Shell) 按鈕:

此時 Cloud Shell 工作階段會在主控台底部的頁框中開啟,您可以使用這個殼層來執行 gcloud 指令。

設定本機殼層

如要安裝 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. 建立具有「read-only」權限的個人存取權杖
  3. 複製存取權杖。

  4. 將存取權杖儲存至本機或 Cloud Shell 的文字檔。

將個人存取權杖儲存在密碼中

主控台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager 頁面

  2. 在「Secret Manager」(密鑰管理工具) 頁面中,按一下「Create Secret」(建立密鑰)

  3. 在「建立密鑰」頁面的「名稱」下方,將密鑰命名為 my-secret

  4. 在「Secret value」(密鑰值) 欄位中,輸入 Docker Hub 個人存取權杖。

  5. 請勿變更「區域」部分。

  6. 按一下「Create secret」(建立密鑰) 按鈕。

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. 如果面板尚未開啟,請按一下「Show Info Panel」(顯示資訊面板) 開啟面板。

  4. 在資訊面板中,按一下「新增主體」

  5. 在「新增主體」文字區域中,輸入 Artifact Registry 服務帳戶的電子郵件地址。Artifact Registry 服務帳戶電子郵件地址的格式如下

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

    其中 PROJECT-NUMBER 是您的專案編號。

    如要找出專案編號,請按照下列步驟操作:

    • 前往 Google Cloud 控制台的「資訊主頁」頁面

      前往「資訊主頁」頁面

    • 按一下頁面頂端的「Select from」下拉式清單。

    • 在隨即顯示的「Select from」視窗中,選取所需專案。

      專案資訊主頁的「Project info」(專案資訊) 卡片會顯示專案 ID 和專案編號。

  6. 在「Select a role」(請選擇角色) 下拉式選單中,依序選擇「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 控制台的「資訊主頁」頁面

    前往「資訊主頁」頁面

  • 按一下頁面頂端的「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 是您建立的密鑰版本,用於儲存 Docker Hub 個人存取權杖。

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 控制台中開啟「Repositories」(存放區) 頁面。

    開啟「存放區」頁面

  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.

後續步驟