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

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

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


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

逐步引導


事前準備

  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 Cloud Build, Compute Engine and Artifact Registry 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 Cloud Build, Compute Engine and Artifact Registry 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. 請確認預設的 Compute Engine 服務帳戶具備足夠的權限。
    1. 新增 storage.objectUser 角色:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/storage.objectUser"
      
    2. 新增 artifactregistry.writer 角色:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/artifactregistry.writer"
      
    3. 如果無法順利新增這兩種角色,請與專案管理員聯絡。

    4. 新增 iam.serviceAccountUser 角色,其中包含要部署至執行階段的 actAs 權限:
      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

    準備要建立的來源檔案

    您需要一些範例原始碼才能封裝至容器映像檔。在本節中,您將建立 shell 指令碼和 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. 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

    使用 Dockerfile 建立映像檔

    Cloud Build 允許您使用 Dockerfile 建構 Docker 映像檔,您不需要有單獨的 Cloud Build 設定檔。

    如要使用 Dockerfile 建構:

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

      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. 必要時,請選取您的專案,然後按一下「Open」

      畫面會顯示「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. 點選「刪除」。

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

後續步驟