使用 Cloud Build 建構及推送 Docker 映像檔

瞭解如何開始使用 Cloud Build,建構 Docker 映像檔並推送至 Artifact Registry。Artifact Registry:讓您在單一位置集中管理私人套件和 Docker 容器映像檔。

您會先使用 Dockerfile (Docker 設定檔) 建構映像檔,然後使用 Cloud Build 設定檔建構相同的映像檔。


如要直接在 Cloud Shell 編輯器中按照逐步指南操作,請按一下「Guide me」(逐步引導)

逐步引導


事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build, Compute Engine and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 安裝 Google Cloud CLI。

  6. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  7. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build, Compute Engine and Artifact Registry APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. 安裝 Google Cloud CLI。

  12. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  13. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  14. 確認您在專案中具備下列角色: Artifact Registry 管理員、Cloud Build 編輯者、記錄檢視者、服務帳戶使用者、服務使用情形管理員、Storage 儲存空間檢視者、Storage 物件建立者

    檢查角色

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

      前往「IAM」頁面
    2. 選取專案。
    3. 在「主體」欄中,找出所有識別您或您所屬群組的資料列。如要瞭解自己所屬的群組,請與管理員聯絡。

    4. 針對指定或包含您的所有列,請檢查「角色」欄,確認角色清單是否包含必要角色。

    授予角色

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

      前往「IAM」頁面
    2. 選取專案。
    3. 按一下「Grant access」(授予存取權)
    4. 在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是指 Google 帳戶的電子郵件地址。

    5. 按一下「選取角色」,然後搜尋角色。
    6. 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
    7. 按一下「Save」(儲存)

準備要建立的來源檔案

您需要一些範例原始碼,才能封裝到容器映像檔中。在本節中,您將建立殼層指令碼和 DockerfileDockerfile 是文字文件,內含 Docker 建構映像檔的操作說明。

  1. 開啟終端機視窗。

  2. 建立名為 quickstart-docker 的新目錄,然後前往該目錄:

    mkdir quickstart-docker
    cd quickstart-docker
    
  3. 建立名為 quickstart.sh 的檔案,並在當中加入下列內容:

    #!/bin/sh
    echo "Hello, world! The time is $(date)."
  4. 建立名為 Dockerfile 的檔案,並在當中加入下列內容:

    FROM alpine
    COPY quickstart.sh /
    CMD ["/quickstart.sh"]
  5. 在終端機視窗中,執行下列指令以便執行 quickstart.sh

    chmod +x quickstart.sh
    

在 Artifact Registry 中建立 Docker 存放區

  1. 使用 gcloud artifacts repositories create 指令,在 us-west2 位置中建立名為 quickstart-docker-repo 的 Docker 存放區,並將說明設為「Docker repository」(Docker 存放區):

    gcloud artifacts repositories create quickstart-docker-repo --repository-format=docker \
        --location=us-west2 --description="Docker repository"
    
  2. 確認存放區是否已成功建立:

    gcloud artifacts repositories list
    

    顯示的存放區清單應包含 quickstart-docker-repo

    Artifact Registry 會使用命名慣例來識別存放區和映像檔。舉例來說,與儲存在 us-west2 區域 Artifact Registry 中的 Docker 映像檔互動時,您會在指令中使用 us-west2-docker.pkg.dev 做為登錄主機名稱。

使用 Dockerfile 建構映像檔

使用 gcloud builds submit 指令,透過 Dockerfile 建構 Docker 映像檔。您不需要有單獨的 Cloud Build 設定檔。

  1. 執行下列指令來取得專案 ID: Google Cloud

    gcloud config get-value project
    
  2. 在含有 quickstart.shDockerfile 的目錄中執行下列指令:

    gcloud builds submit --region=us-west2 --tag us-west2-docker.pkg.dev/PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1
    

    建構完成後,輸出內容應如下所示:

    DONE
    ------------------------------------------------------------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION  SOURCE   IMAGES     STATUS
    545cb89c-f7a4-4652-8f63-579ac974be2e  2020-11-05T18:16:04+00:00  16S       gs://gcb-docs-project_cloudbuild/source/1604600163.528729-b70741b0f2d0449d8635aa22893258fe.tgz  us-west2-docker.pkg.dev/gcb-docs-project/quickstart-docker-repo/quickstart-image:tag1  SUCCESS
    

您已成功使用 Dockerfile 建立名為 quickstart-image 的 Docker 映像檔,並推送至 Artifact Registry。

透過建構設定檔建立映像檔

在本節中,您會使用 Cloud Build 設定檔,建構與先前步驟中建構的 Docker 映像檔相同的映像檔。建構設定檔會根據您的規格,指示 Cloud Build 執行工作。

  1. 在含有 quickstart.shDockerfile 的同一個目錄中,建立名為 cloudbuild.yaml 的檔案,並在當中加入下列內容。這個檔案是您的建構設定檔。在建構階段,Cloud Build 會將 $PROJECT_ID 自動取代為您的專案 ID。

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      script: |
        docker build -t us-west2-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1 .
      automapSubstitutions: true
    images:
    - 'us-west2-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
  2. 執行下列指令來展開建構作業:

    gcloud builds submit --region=us-west2 --config cloudbuild.yaml
    

    建構完成後,輸出內容應如下所示:

     DONE
     ------------------------------------------------------------------------------------------------------------------------------------
     ID                                    CREATE_TIME                DURATION  SOURCE          IMAGES          STATUS
     046ddd31-3670-4771-9336-8919e7098b11  2020-11-05T18:24:02+00:00  15S       gs://gcb-docs-project_cloudbuild/source/1604600641.576884-8153be22c94d438aa86c78abf11403eb.tgz  us-west2-docker.pkg.dev/gcb-docs-project/quickstart-docker-repo/quickstart-image:tag1  SUCCESS
    

您已成功透過建構設定檔建立 quickstart-image,並將映像檔推送至 Artifact Registry。

查看建構作業詳細資料

  1. 在 Google Cloud 控制台中開啟 Cloud Build 頁面。

    開啟 Cloud Build 頁面

  2. 如有需要,請選取專案並按一下「開啟」

    畫面會顯示「Build history」(建構歷史記錄) 頁面:

    建構記錄頁面的螢幕擷圖

  3. 如有需要,請在「Region」(區域) 下拉式選單中選取「us-west2」,即可查看該區域中的建構作業。

    系統會列出兩個建構,分別對應您在本快速入門導覽課程中執行的建構。

  4. 按一下其中一個建構。

    畫面中會顯示「Build details」(建構作業詳細資料) 頁面。

  5. 如要查看建構作業的構件,請按一下「Build Summary」(建構作業摘要) 下方的「Build artifacts」(建構作業構件)

    輸出結果應該會類似下列內容:

    建構成果的螢幕截圖

    您可以在這個頁面中下載建構作業記錄檔,以及查看 Artifact Registry 中的映像檔詳細資料。

清除所用資源

為了避免系統向您的 Google Cloud 帳戶收取本頁面所用資源的費用,請按照下列步驟操作。

  1. 在 Google Cloud 控制台中開啟 Artifact Registry 頁面。

    開啟 Artifact Registry 頁面

  2. 選取您的專案並按一下 [Open] (開啟)

  3. 選取「quickstart-docker-repo」

  4. 點選「刪除」。

您已成功刪除在本快速入門導覽課程中建立的存放區。

後續步驟