コンテナの構成

コンテナポート、コンテナ エントリ ポイントのコマンド、その引数の構成方法について学習します。

Knative serving がコンテナを起動すると、イメージのデフォルトのエントリポイント コマンドとデフォルトのコマンド引数が実行されます。イメージのデフォルトのエントリポイントとコマンド引数をオーバーライドする場合は、コンテナ構成の command フィールドと args フィールドを使用できます。command フィールドは、コンテナによって実行される実際のコマンドを指定します。args フィールドは、そのコマンドに渡される引数を指定します。

コンテナポートの構成

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

コンテナは、特定のハードコードされたポートではなく、PORT 環境変数で定義されたポートをリッスンする必要があります。ただし、これができない場合は、どのポートのリクエストをコンテナに送信するかを構成できます。

コンソール

  1. Google Cloud コンソールで Knative serving に移動します。

    Knative serving に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [詳細設定] で [コンテナ] をクリックします。

  4. リクエストを送信するポートを指定します(デフォルト値 8080 でない場合)。これにより、PORT 環境変数も設定されます。

  5. [次へ] をクリックして、次のセクションに進みます。

  6. [このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。

  7. [作成] をクリックしてイメージを Knative serving にデプロイし、デプロイの完了を待ちます。

コマンドライン

  • 既存のサービスの場合は、次のパラメータを指定して gcloud run services update コマンドを実行し、ポートの設定を更新します。

    gcloud run services update SERVICE --port PORT
    

    以下のように置き換えます。

    • SERVICE は、サービスの名前に置き換えます。
    • PORT は、リクエストを送信するポートに置き換えます。デフォルトのポートは 8080 です。
  • 新しいサービスの場合は、--port パラメータを指定して gcloud run deploy コマンドを実行し、ポートを設定します。

    gcloud run deploy SERVICE --image=IMAGE_URL --port PORT
    

    以下のように置き換えます。

    • SERVICE は、サービスの名前に置き換えます。
    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • PORT はリクエストを送信するポートに置き換えます。デフォルト ポートは 8080 です。

YAML

--format=export フラグを使用して、gcloud run services describe コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。

  1. ローカル ワークスペースの service.yaml という名前のファイルにサービスの構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE は、Knative serving サービスの名前に置き換えます。

  2. ローカル ファイルで containerPort: 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

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

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • PORT はリクエストを送信するポートに置き換えます。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

コンテナのエントリポイント コマンドと引数の構成

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

Knative serving がコンテナを起動すると、イメージのデフォルト エントリポイント コマンドが実行されます。コンテナ イメージに定義されている既存のエントリポイント コマンドと引数を指定またはオーバーライドするには、Knative serving コンテナ構成で commandargs の設定を構成します。

エントリポイント コマンド、引数、またはその両方を構成できます。Knative serving で指定したコマンドは、コンテナ イメージに定義されているエントリポイント コマンドをオーバーライドします。引数だけを指定した場合、これらの引数はコンテナ イメージで定義されたエントリ ポイント コマンドに渡され、実行されます。

Knative serving では、新しいサービスをデプロイし、既存のサービスを更新する、またはリビジョンをデプロイする際に、Google Cloud コンソール、Google Cloud CLI、または YAML ファイルを使用して、エントリポイント コマンドと引数を構成できます。

コンソール

  1. Google Cloud コンソールで Knative serving に移動します。

    Knative serving に移動

  2. デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成する場合は、そのサービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. [詳細設定] で [コンテナ] をクリックします。

  4. 起動時にコンテナを実行するエントリポイント コマンドと引数を指定します。

  5. [次へ] をクリックして、次のセクションに進みます。

  6. [このサービスをトリガーする方法の構成] セクションで、サービスを呼び出すために使用する接続を選択します。

  7. [作成] をクリックしてイメージを Knative serving にデプロイし、デプロイの完了を待ちます。

コマンドライン

コマンド パラメータ オプション

  • カンマ(,)を含む引数を指定する場合は、各 ARG を別の区切り文字でエスケープする必要があります。たとえば、@ を使用する場合は、次のようにします。
    --args "^@^arg,with,commas@anotherarg@ARG3..."
    
  • 複数の Key-Value ペアを指定するには、読みやすくするために複数のパラメータを指定します。例:
    [...]
    --args "ARG1" \
    --args "ARG2" \
    --args "ARG3"
    
  • 引数で等号(=)を使用する場合は、各引数を次の形式で指定する必要があります。
    gcloud run services ...  \
      --args "--repo-allowlist=github.com/example/example_demo" \
      --args "--gh-webhook-secret=XX"
    

  • 既存のサービスの場合、次のパラメータを指定して gcloud run services update コマンドを実行し、エントリポイント コマンドを更新します。

    gcloud run services update SERVICE --command COMMAND --args ARG1,ARG2,ARG-N
    

    以下のように置き換えます。

    • SERVICE は、サービスの名前に置き換えます。
    • 省略可: COMMAND は、起動時にコンテナが実行するコマンドに置き換えます。
    • 省略可: ARG1 は、起動時に実行されるコマンドの 1 つ以上の引数を指定します。複数の引数を指定する場合は、カンマ区切りのリストを使用します。引数の形式
  • 新しいサービスの場合、エントリポイント コマンドを設定するには、--command パラメータを指定して gcloud run deploy コマンドを実行します。

    gcloud run deploy SERVICE --image=IMAGE_URL --command COMMAND --args ARG1,ARG2,ARG-N
    

    以下のように置き換えます。

    • SERVICE は、サービスの名前に置き換えます。
    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • 省略可: COMMAND は、起動時にコンテナが実行するコマンドに置き換えます。
    • 省略可: ARG1 は、起動時に実行されるコマンドの 1 つ以上の引数を指定します。複数の引数を指定する場合は、カンマ区切りのリストを使用します。引数の形式

YAML

--format=export フラグを使用して、gcloud run services describe コマンドで既存のサービスの構成を YAML ファイルにダウンロードできます。次に YAML ファイルを変更し、gcloud run services replace コマンドを使用してこれらの変更をデプロイします。指定した属性のみを変更する必要があります。

  1. ローカル ワークスペースの service.yaml という名前のファイルにサービスの構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE は、Knative serving サービスの名前に置き換えます。

  2. ローカル ファイルで command 属性と args 属性を更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            command:
            - COMMAND
            args:
            - "ARG1"
            - "ARG-N"
    

    以下のように置き換えます。

    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/cloudrun/hello など)に置き換えます。
    • 省略可: COMMAND は、起動時にコンテナが実行するコマンドに置き換えます。
    • 省略可: ARG1 は、起動時に実行されるコマンドの 1 つ以上の引数を指定します。複数の引数を指定する場合は、カンマ区切りのリストを使用します。
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml