Cloud Build を使用して Docker イメージをビルドし、push する

Docker イメージをビルドし、そのイメージを Artifact Registry に push して、Cloud Build の使用を開始する方法を学習します。Artifact Registry では、プライベート・パッケージと Docker コンテナ イメージを管理する単一の場所が準備されています。

まず、Docker 構成ファイルの Dockerfile を使用してイメージをビルドし、次に Cloud Build 構成ファイルを使用して同じイメージをビルドします。


このタスクを Cloud Shell エディタで直接行う際のガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


始める前に

  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. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

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

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。
    1. storage.admin ロールを追加します。
      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.admin"
      
    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
      

ビルドするソースファイルを準備する

コンテナ イメージにパッケージ化するには、サンプルのソースコードが必要です。このセクションでは、シェル スクリプトと Dockerfile を作成します。Dockerfile は、Docker がイメージを作成するための指示を含むテキスト ドキュメントです。

  1. ターミナル ウィンドウを開きます。

  2. quickstart-docker という名前で新しいディレクトリを作成し、そのディレクトリに移動します。

    mkdir quickstart-docker
    cd quickstart-docker
    
  3. 次の内容のファイルを quickstart.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 に「Docker repository」という説明の付いた quickstart-docker-repo という新しい 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 で、Docker イメージを Dockerfile を使用してビルドできます。個別の 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 に push します。

ビルド構成ファイルを使用してイメージをビルドする

このセクションでは、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 に push しました。

ビルドの詳細を表示

  1. Google Cloud コンソールで Cloud Build ページを開きます。

    Cloud Build ページを開く

  2. 必要に応じて、プロジェクトを選択し、[開く] をクリックします。

    [ビルド履歴] ページが表示されます。

    ビルド履歴ページのスクリーンショット

  3. 必要に応じて、[リージョン] プルダウン メニューで us-west2 を選択して、そのリージョンのビルドを表示します。

    このクイックスタートで実行したビルドごとに 1 つずつ、2 つのビルドが表示されます。

  4. いずれかのビルドをクリックします。

    [ビルドの詳細] ページが表示されます。

  5. ビルドのアーティファクトを表示するには、[ビルドの概要] で [ビルド アーティファクト] をクリックします。

    出力は次のようになります。

    ビルド アーティファクトのスクリーンショット

    このページから、ビルドログをダウンロードして、Artifact Registry でイメージの詳細を表示できます。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

  1. Google Cloud コンソールで Artifact Registry ページを開きます。

    Artifact Registry ページを開きます。

  2. プロジェクトを選択し、[開く] をクリックします。

  3. [quickstart-docker-repo] を選択します。

  4. [削除] をクリックします。

このクイックスタートで作成したリポジトリの削除は完了です。

次のステップ