このガイドでは、アプリケーションのソースコードで Buildpack を使用してコンテナ イメージを作成する方法について説明します。たとえば、Buildpack を使用して Cloud Run サービスのソースコードからコンテナ イメージをビルドします。
Buildpack を使用してコンテナ イメージをビルドする方法は 2 つあります。
pack
CLI を使用してローカルでビルドし、アプリケーションをローカルでテストします。また、デプロイ前に変更のプロトタイプを迅速に作成します。- Cloud Build を使用してリモートでビルドします。Cloud Build を使用したビルドは、リソースを大量に消費するビルドプロセスを含む大規模なアプリケーションに有用です。また、ソフトウェア サプライ チェーンの保護にも役立ちます。
ローカルビルド
pack
CLI を使用して、ローカルでアプリケーションからコンテナ イメージをビルドします。
始める前に
- Docker Community Edition(CE)をワークステーションにインストールします。
pack
は Docker を OCI イメージ ビルダーとして使用します。 - Pack CLI をインストールします。
- GitHub からサンプル アプリケーションを取得するために Git ソース管理ツールをインストールします。
アプリケーションをローカルでビルドする
pack build
コマンドを使用して、デフォルトのビルダー --builder=gcr.io/buildpacks/builder
を指定し、コンテナ イメージをローカルでビルドします。
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
IMAGE_NAME
は、サービスのコンテナ イメージの名前に置き換えます。
ビルドイメージと実行イメージを拡張して、コンテナ イメージをカスタマイズすることもできます。
サンプル アプリケーションをローカルでビルドする
次の例は、ローカルでサンプルを作成する方法を示しています。
- ローカルマシンにサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- アプリケーションのサンプルコードが含まれているディレクトリに移動します。
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
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
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
- localhost:8080 を使用して、実行中のアプリケーションにアクセスします。
リモートビルド
Cloud Build を使用してアプリケーションをコンテナ イメージに作成し、イメージの保存とデプロイを行うコンテナ リポジトリとして Artifact Registry を使用します。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Google Cloud プロジェクトがコンテナ イメージ リポジトリにアクセスできることを確認します。
Artifact Registry の Docker リポジトリへのアクセスを構成するには:
- 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-west2
にdocker
リポジトリを作成するには、次のコマンドを実行します。gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- リポジトリが作成されたことを確認します。
gcloud artifacts repositories list
Docker リポジトリに選択した名前がリストに表示されます。
- Google Cloud プロジェクトの同じロケーションに 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/app-image
構成ファイルを使用してビルドする
構成ファイルを使用すると、ビルドコマンドだけでイメージ リポジトリの構成の詳細を定義できます。構成ファイルは YAML ファイル形式にして、pack
CLI を使用するビルドステップを含める必要があります。
- コンテナ イメージ リポジトリの URI を含む YAML ファイル(ファイル名:
cloudbuild.yaml
)を作成します。
options: logging: CLOUD_LOGGING_ONLY pool: {} projectId: PROJECT_ID steps: - name: gcr.io/k8s-skaffold/pack entrypoint: pack args: - build - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME - --builder - gcr.io/buildpacks/builder:latest - --network - cloudbuild images: - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
次のように置き換えます。
LOCATION
は、コンテナ リポジトリのリージョン名(us-west2
など)に置き換えます。PROJECT_ID
は、Google Cloud プロジェクトの ID に置き換えます。REPO_NAME
は Docker リポジトリの名前に置き換えます。IMAGE_NAME
は、コンテナ イメージの名前に置き換えます。
アプリケーションをビルドします。
構成ファイルの名前が
cloudbuild.yaml
の場合は、次のコマンドを実行します。gcloud builds submit .
例: サンプル アプリケーションをリモートでビルドする
次の例は、サンプルをリモートで作成し、コンテナ イメージが Artifact Registry のリポジトリに push されたことを確認する方法を示しています。
- ローカルマシンにサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- アプリケーションのサンプルコードが含まれているディレクトリに移動します。
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
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
-
サンプル アプリケーションが
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 リポジトリの名前に置き換えます。
次のステップ
- イメージを Cloud Run にデプロイする。
- 環境変数を設定する。
- ビルドイメージを構成する。
- キャッシュ イメージを使用してビルドを高速化する。