Buildpack を使用してアプリケーションをビルドする

このガイドでは、アプリケーションのソースコードで Buildpack を使用してコンテナ イメージを作成する方法について説明します。たとえば、Buildpack を使用して Cloud Run サービスのソースコードからコンテナ イメージをビルドします。

Buildpack を使用してコンテナ イメージをビルドする方法は 2 つあります。

  • pack CLI を使用してローカルでビルドし、アプリケーションをローカルでテストします。また、デプロイ前に変更のプロトタイプを迅速に作成します。
  • Cloud Build を使用してリモートでビルドします。Cloud Build を使用したビルドは、リソースを大量に消費するビルドプロセスを含む大規模なアプリケーションに有用です。また、ソフトウェア サプライ チェーンの保護にも役立ちます。

ローカルビルド

pack CLI を使用して、ローカルでアプリケーションからコンテナ イメージをビルドします。

始める前に

  1. Docker Community Edition(CE)をワークステーションにインストールします。pack は Docker を OCI イメージ ビルダーとして使用します。
  2. Pack CLI をインストールします。
  3. GitHub からサンプル アプリケーションを取得するために Git ソース管理ツールをインストールします。

アプリケーションをローカルでビルドする

pack build コマンドを使用して、デフォルトのビルダー --builder=gcr.io/buildpacks/builder を指定し、コンテナ イメージをローカルでビルドします。

pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME

IMAGE_NAME は、サービスのコンテナ イメージの名前に置き換えます。

ビルドイメージと実行イメージを拡張して、コンテナ イメージをカスタマイズすることもできます。

サンプル アプリケーションをローカルでビルドする

次の例は、ローカルでサンプルを作成する方法を示しています。

  1. ローカルマシンにサンプル リポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. アプリケーションのサンプルコードが含まれているディレクトリに移動します。

    Go

    cd buildpack-samples/sample-go

    Java

    cd buildpack-samples/sample-java-gradle

    Node.js

    cd buildpack-samples/sample-node

    PHP

    cd buildpack-samples/sample-php

    Python

    cd buildpack-samples/sample-python

    Ruby

    cd buildpack-samples/sample-ruby

    .NET

    cd buildpack-samples/sample-dotnet
  3. pack を使用してサンプル アプリケーション イメージをビルドします。

    Go

    pack build --builder=gcr.io/buildpacks/builder sample-go

    Java

    pack build --builder=gcr.io/buildpacks/builder sample-java-gradle

    Node.js

    pack build --builder=gcr.io/buildpacks/builder sample-node

    PHP

    pack build --builder=gcr.io/buildpacks/builder sample-php

    Python

    pack build --builder=gcr.io/buildpacks/builder sample-python

    Ruby

    pack build --builder=gcr.io/buildpacks/builder sample-ruby

    .NET

    pack build --builder=gcr.io/buildpacks/builder sample-dotnet
  4. docker を使用してイメージを実行します。

    Go

    docker run -p8080:8080 sample-go

    Java

    docker run -it -ePORT=8080 -p8080:8080 sample-java-gradle

    Node.js

    docker run -it -ePORT=8080 -p8080:8080 sample-node

    PHP

    docker run -it --rm -p 8080:8080 sample-php

    Python

    docker run -it -ePORT=8080 -p8080:8080 sample-python

    Ruby

    docker run -it -ePORT=8080 -p8080:8080 sample-ruby

    .NET

    docker run -it -ePORT=8080 -p8080:8080 sample-dotnet
  5. localhost:8080 を使用して、実行中のアプリケーションにアクセスします。

リモートビルド

Cloud Build を使用してアプリケーションをコンテナ イメージに作成し、イメージの保存とデプロイを行うコンテナ リポジトリとして Artifact Registry を使用します。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud Build and Artifact Registry API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. Cloud Build and Artifact Registry API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

    gcloud init
  12. Google Cloud プロジェクトがコンテナ イメージ リポジトリにアクセスできることを確認します。

    Artifact Registry の Docker リポジトリへのアクセスを構成するには:

    1. Google Cloud プロジェクトの同じロケーションに Docker リポジトリを新規作成します。
      gcloud artifacts repositories create REPO_NAME \
      --repository-format=docker \
      --location=REGION --description="DESCRIPTION"
      
      次のように置き換えます。
      • REPO_NAME は、Docker リポジトリに選択した名前に置き換えます。
      • REGION は、Google Cloud プロジェクトのロケーションに、またはそれに最も近いロケーションに置き換えます。
      • DESCRIPTION は選択した説明に置き換えます。

      たとえば、「Docker repository」という説明を使用して us-west2docker リポジトリを作成するには、次のコマンドを実行します。

      gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \
      --location=us-west2 --description="Docker repository"
      
    2. リポジトリが作成されたことを確認します。
      gcloud artifacts repositories list
      

      Docker リポジトリに選択した名前がリストに表示されます。

アプリケーションをリモートでビルドする

gcloud builds submit コマンドを使用して、コンテナ イメージをビルドしてリポジトリにアップロードします。

コマンドにコンテナ イメージを指定することも、構成ファイルを使用することもできます。

コマンドでビルドする

構成ファイルなしでビルドするには、image フラグを指定します。

gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME

次のように置き換えます。

  • LOCATION は、コンテナ リポジトリのリージョン名に置き換えます。例: us-west2
  • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
  • REPO_NAME は Docker リポジトリの名前に置き換えます。
  • IMAGE_NAME は、コンテナ イメージの名前に置き換えます。

例:

gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo

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

構成ファイルを使用すると、ビルドコマンドだけでイメージ リポジトリの構成の詳細を定義できます。構成ファイルは YAML ファイル形式にして、pack CLI を使用するビルドステップを含める必要があります。

  1. コンテナ イメージ リポジトリの URI を含む YAML ファイル名 cloudbuild.yaml を作成します。

    options:
      logging: CLOUD_LOGGING_ONLY
      pool: {}
    projectId: PROJECT_ID
    steps:
    - name: gcr.io/k8s-skaffold/pack
      entrypoint: pack
      args:
      - build
      - REPOSITORY_URI
      - --builder
      - gcr.io/buildpacks/builder:latest
      - --network
      - cloudbuild
    

    次のように置き換えます。

    • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
    • REPOSITORY_URI は、コンテナ イメージ リポジトリの URI に置き換えます。例: us-west2-docker.pkg.dev/my-project-id/my-repo-name
  2. アプリケーションをビルドします。

    構成ファイルの名前が cloudbuild.yaml の場合は、次のコマンドを実行します。

    gcloud builds submit .
    

例: サンプル アプリケーションをリモートでビルドする

次の例は、サンプルをリモートで作成し、コンテナ イメージが Artifact Registry のリポジトリに push されたことを確認する方法を示しています。

  1. ローカルマシンにサンプル リポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
  2. アプリケーションのサンプルコードが含まれているディレクトリに移動します。

    Go

    cd buildpack-samples/sample-go

    Java

    cd buildpack-samples/sample-java-gradle

    Node.js

    cd buildpack-samples/sample-node

    PHP

    cd buildpack-samples/sample-php

    Python

    cd buildpack-samples/sample-python

    Ruby

    cd buildpack-samples/sample-ruby

    .NET

    cd buildpack-samples/sample-dotnet
  3. gcloud を使用して、アプリケーションのソースコードを Cloud Build に送信します。

    Go

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-go

    Java

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-java-gradle

    Node.js

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-node

    PHP

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-php

    Python

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-python

    Ruby

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-ruby

    .NET

    gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-dotnet
  4. サンプル アプリケーションが REPO_NAME に正常に公開されたことを確認します。
    gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME

    次のように置き換えます。

    • LOCATION は、コンテナ リポジトリのリージョン名に置き換えます。例: us-west2
    • PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
    • REPO_NAME は Docker リポジトリの名前に置き換えます。

次のステップ