Compose を使用してサービスをデプロイする

このページでは、Compose 仕様に基づくファイルを使用して、Cloud Run にサービスをデプロイする方法について説明します。

次の方法で、Compose ファイルを使用して Cloud Run にデプロイできます。

Compose を使用して Cloud Run にデプロイすることは、開発に最適であり、ローカル環境からクラウド環境への移行を簡素化します。これにより、ローカル アプリケーションとデプロイされたアプリケーションの両方で一貫した構成形式を維持できます。

Infrastructure as Code(IaC)環境で本番環境を管理する場合は、Terraform を使用することをおすすめします。

制限事項

  • Compose デプロイでは、複数のコンテナを含む単一の Cloud Run サービスがデプロイされます。
  • Compose デプロイは、サポートされている Cloud Run 機能のサブセットのみを変換します。
  • Compose を使用して作成されたサービスは、デフォルトで最大インスタンス数 1 に設定されます。
  • デプロイは簡素化されますが、Cloud Run Compose のデプロイは、本番環境向けの包括的な infrastructure-as-code 戦略の代わりにはなりません。

Compose を使用してコンテナ イメージからサービスをデプロイする

compose.yaml ファイルでサービスを定義し、既存のコンテナ イメージからデプロイします。詳細については、コンテナ イメージをデプロイするをご覧ください。

例: 単一サービス アプリケーション

次の例は、ビルド済みコンテナ イメージを使用するウェブサービスの compose.yaml ファイルを示しています。

services:
  web:
    image: us-docker.pkg.dev/cloudrun/container/hello
    ports:
      - "8080:8080"

サービスをデプロイする

  1. サービスをデプロイするには、gcloud beta run compose up コマンドを実行します。

    gcloud beta run compose up compose.yaml

  2. 必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、y と応答します。

  3. 省略可: サービスへの未認証アクセスを許可する場合は、サービスを一般公開にします

    デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。

Compose を使用してソースからデプロイする

compose.yaml ファイルでサービスを定義し、ソースコードからビルドしてデプロイします。詳細については、ソースコードからサービスをデプロイするをご覧ください。

例: 単一サービス アプリケーション

次の例は、現在のディレクトリのソースからビルドするウェブサービスの compose.yaml ファイルを示しています。

services:
  web:
    build: .
    ports:
      - "8080:8080"

サービスをデプロイする

  • プロジェクト ディレクトリに、サービス定義を含む compose.yaml ファイルを作成します。

    1. サービスをデプロイするには、gcloud beta run compose up コマンドを実行します。

      gcloud beta run compose up compose.yaml
    2. 必要なコンポーネントをインストールするプロンプトや API を有効にするプロンプトが表示されたら、「y」と応答します。

    3. 省略可: サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします

    デプロイが完了すると、Cloud Run サービスの URL が表示されます。この URL をコピーしてブラウザに貼り付けると、実行中のコンテナが表示されます。 Google Cloud コンソールからデフォルトの認証を無効にできます。

サポートされている機能

compose.yaml ファイルを使用してデプロイすると、Cloud Run は Compose ファイルで定義されている他の Google Cloud リソースを自動的にプロビジョニングできます。リソースが必要な場合、Cloud Run はリソースを作成する前に同意を求めます。

Cloud Run は、Compose 機能の次のサブセットをサポートしています。

Compose フィールド Cloud Run のマッピングと説明
services

サービスは、デプロイされた Cloud Run サービスの個々のコンテナにマッピングされます。

volumes

一部サポート対象。bindvolumetmpfs マウントを Cloud Run の同等のマウントに変換します。

secrets

サポートされています。Secret Manager の使用。

configs

サポートされています。Cloud Storage の使用

build

Cloud Build は、ビルド コンテキストを使用してコンテナをビルドし、タグ付けして Artifact Registry の cloud-run-source-deploy リポジトリに push します。

image

サポートされているレジストリからビルド済みのコンテナ イメージをデプロイします。ビルド済みのイメージがある場合に使用します。Docker Hub と Artifact Registry のイメージのみをサポートします。カスタム イメージの場合は、イメージを Artifact Registry に push して使用できます。

ports

イングレコンテナを決定するポート マッピングのリスト(8080:8080 など)。

expose

依存サービスが通信に使用できるポートを確保するために、3000 などの公開はするがパブリッシュはしないポートのリスト。

depends_on

コンテナの起動順序を定義します。これにより、run-compose にリストされているすべてのサービスに ports または expose で定義されたポートが割り当てられ、他のコンテナがそのサービスと通信できるようになります。

cpu_count / cpus

Cloud Run の CPU とメモリの上限を設定するために使用されるヒント。次のロジックに従ってリソースが自動的に割り当てられます。

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

依存関係の解決に使用するコンテナの名前を設定します。指定されていない場合は、デフォルトでサービス名が使用されます。

environment

環境変数を Cloud Run の対応するコンテナに渡します。

command

コンテナで宣言されたコンテナのデフォルト コマンドを、Cloud Run の args 属性にマッピングしてオーバーライドします。たとえば、Dockerfile の CMD 命令などです。

entrypoint

サポート対象

env_file

サポート対象

x-google-cloudrun:ingress-container

(拡張機能)この Google 固有の拡張機能をサービスに追加し、true に設定して、すべての外部トラフィックを受信する Ingress コンテナとしてマークします。

x-google-cloudrun:volume-type: in-memory

(拡張機能)この Google 固有の拡張機能をボリュームに追加し、Cloud Storage でバックアップされたデフォルトのボリュームではなく、in-memory に設定します。

Secret Manager にマッピングされたシークレット

compose.yaml ファイルで secrets が定義されている場合、gcloud CLI はこのデータを保存するために Secret Manager シークレットをプロビジョニングします。

Cloud Storage にマッピングされたボリュームと構成

compose.yaml ファイルでトップレベルの volumes または configs が定義されている場合、gcloud CLI はこのデータを管理するために Cloud Storage バケットをプロビジョニングします。デプロイごとに 1 つのバケットが作成され、フォルダを使用してボリュームと構成が分離されます。

  • 名前付きボリューム: ボリューム名に対応する空のフォルダがバケットに作成されます。
  • バインド マウント: バインド マウントの場合、Cloud Run はデプロイ前にローカル ソース ディレクトリの内容をバケット内のフォルダにアップロードします。
  • 構成: file: ソースで定義された構成ごとに、Cloud Run はローカル ファイルの内容をバケット内のフォルダにアップロードします。

必要なロール

デプロイ中、Cloud Run は、プロビジョニングされたリソースにアクセスするために必要なロールを、デプロイされたサービスのサービス ID に自動的に付与します。

  • Cloud Storage バケット: roles/storage.objectUser
  • Secret Manager シークレット: roles/secretmanager.secretAccessor

同じインスタンスのコンテナ間の通信

Cloud Run は、各コンテナの /etc/hosts ファイルにエントリを追加します。このエントリは、compose.yaml ファイルのサービス名を内部 IP アドレスにマッピングします。これにより、サービスはサービス名を使用して相互に通信できます。

次のステップ