コンテナを実行する際のオプションの構成

このページでは、Compute Engine でコンテナを実行するための構成オプションについて説明します。設定オプションは、Google Cloud Platform Console や gcloud コマンドライン ツールを使用して、VM インスタンスを作成または更新したり、インスタンス テンプレートを作成したりするときに指定できます。

質問や問題の報告、フィードバックのご連絡については、Compute Engine 上のコンテナチームにお問い合わせください。

始める前に

再起動ポリシーを指定する

再起動ポリシーを設定すると、終了時にコンテナを再起動するかどうかを指定できます。デフォルトのポリシーは、常に再起動することです。障害発生時に再起動するようにすることも、再起動は行わないようにすることもできます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、目的の再起動ポリシーを指定します。

gcloud

コンテナの再起動ポリシーを指定するには、--container-restart-policy フラグを使用します。

  • always(デフォルト)
  • on-failure
  • never

次の例では、on-failure 再起動ポリシーが指定されたコンテナを起動しています。つまり、コンテナの終了コードがゼロ以外の場合にのみ再起動が行われます。

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-restart-policy on-failure

VM 上で実行されているコンテナの再起動ポリシーを指定するには、gcloud compute instances update-container コマンドで --container-restart-policy フラグを使用します。

特権モードでコンテナを実行する

特権モードでコンテナを実行すると、ホスト上のすべてのデバイスにアクセスできます。コンテナは、デフォルトでは「非特権」として実行され、どのデバイスにもアクセスできません。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [権限のあるユーザーとして実行] をオンにします。

gcloud

ランタイム権限のあるコンテナを実行するには、--container-privileged フラグを使用します。次の例では、特権モードで busybox コンテナを起動しています。

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-privileged

VM 上のコンテナを更新するには、gcloud compute instances update-container コマンドで --container-privileged フラグを使用します。特権モードをオフにするには、--no-container-privileged フラグを使用します。

コンテナ ランタイムに STDIN のバッファを割り当てる

コンテナ ランタイムに STDIN のバッファを割り当てると、コンテナに STDIN ストリームを開いたままにすることができます。設定していないと、コンテナでの STDIN からの読み取りが常に EOF になります。

コンテナに対話型シェルを設定する(同時に疑似 TTY を割り当てる)場合や、パイプからの標準入力をコンテナで受け取れるようにするには、STDIN ストリームを開いたままにする必要があります。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [STDIN のバッファの割り当て] をオンにします。

gcloud

コンテナ ランタイムに STDIN のバッファを割り当てるには、--container-stdin フラグを使用します。次の例では、コンテナを起動し、STDIN を開いたままにしています。

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin

VM 上のコンテナを更新するには、gcloud compute instances update-container コマンドで --container-stdin フラグを使用します。STDIN のバッファの割り当てをオフにするには、--no-container-stdin フラグを使用します。

疑似 TTY を割り当てる

コンテナに対話型シェルを設定する(同時に STDIN のバッファを割り当てる)場合には、コンテナに疑似 TTY を割り当てる必要があります。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [疑似 TTY の割り当て] をオンにします。

gcloud

疑似 TTY を割り当てるには、--container-tty フラグを使用します。次の例では、コンテナを起動し、疑似 TTY を割り当てています。

 gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin \
    --container-tty

VM 上のコンテナを更新するには、gcloud compute instances update-container コマンドで --container-tty フラグを使用します。疑似 TTY を割り当てないようにするには、--no-container-tty フラグを使用します。

コンテナの起動時に実行するデフォルトのコマンドをオーバーライドする

コンテナ イメージの ENTRYPOINT では、コンテナの起動時に実行する実行可能ファイルを指定します。これによって、コンテナをその実行可能ファイルのバイナリであるかのように実行できます。

コンテナ イメージの ENTRYPOINT コマンドをオーバーライドできます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [コマンド] ボックスに、パラメータなしで単一の実行可能コマンドを入力します(例: uptime)。

gcloud

コンテナ イメージ ENTRYPOINT をオーバーライドするには、--container-command フラグを使用します。次の例では、busybox コンテナで uptime コマンドを実行して、前回の起動からの経過時間を表示しています。

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "uptime"

VM 上のコンテナのコマンドを更新するには、gcloud compute instances update-container コマンドで --container-command フラグを使用します。

更新したコンテナのデフォルトのコマンドをクリアするには、update-container コマンドで --clear-container-command フラグを使用します。

コンテナの ENTRYPOINT コマンドに引数を渡す

コンテナの ENTRYPOINT コマンドに引数を渡す(追加する)ことも、デフォルトのコンテナの CMD コマンドをオーバーライドすることもできます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [コマンドの引数] の [引数を追加] をクリックします。
  6. ボックスごとに 1 つのコマンド引数を入力します。

gcloud

コンテナ イメージの ENTRYPOINT コマンドに引数を渡すには、--container-arg フラグを使用します。各引数にそれぞれフラグを使用してください。

次の例では、busybox を自動的に実行するように設定されているコンテナで -c ‘ls -l’ 引数を指定した /bin/ash コマンドを実行しています。

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "/bin/ash" \
   --container-arg="-c" \
   --container-arg="ls -l"

VM 上で実行されているコンテナのコマンド引数を更新するには、gcloud compute instances update-container コマンドで --container-arg フラグを使用します。この更新によって、引数リスト全体が新しいリストに置き換えられます。

コンテナ宣言からすべての引数を削除するには、update-container コマンドで --clear-container-args フラグを使用します。

環境変数を設定する

コンテナで環境変数を設定できます。[KEY] が複数回繰り返されるときには、[KEY] の最後の値のみが取得されます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [環境変数] で、[変数を追加] をクリックします。
  6. 必要に応じて、1 行に 1 つずつ環境変数を追加または削除します。

gcloud

コンテナで環境変数を設定するには、--container-env フラグを使用します。次の例では、HOMEMODEOWNER の 3 つの環境変数を設定しています。

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env HOME=/home,MODE=test,OWNER=admin

ローカル ファイルから環境変数を設定するには、--container-env-file フラグを使用します。次の例では、env.txt ファイルから 2 つの環境変数を設定しています。

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env-file ./env.txt

env.txt ファイルの内容は次のとおりです。

# this is a comment
HOME=/home
MODE=test
OWNER=admin

VM 上のコンテナの環境変数を更新するには、gcloud compute instances update-container コマンドで --container-env フラグまたは --container-env-file フラグを使用します。これにより、VM インスタンスのコンテナ宣言に存在するすべての変数が更新されます。コンテナ宣言に含まれていない変数は追加されます。

VM 上のコンテナを更新するときに環境変数を削除するには、--remove-container-env フラグを使用します。次の例では、MODEOWNER という環境変数を削除しています。

gcloud compute instances update-container busybox-vm \
    --remove-container-env MODE,OWNER

指定した環境変数が存在しない場合には通知なく無視されます。

データ ボリュームとしてホスト ディレクトリをマウントする

ホスト VM からコンテナにディレクトリをマウントできます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [ホスト ディレクトリのマウント] で、[Add volume] をクリックします。
  6. 次のものを指定します。

    • マウントパス。ホスト ディレクトリをマウントするコンテナ ディレクトリ構造内のパス。
    • ホストパス。マウントするホスト ディレクトリへのパス。
    • ディレクトリを読み取り / 書き込みモードでマウントするか、読み取り専用モードでマウントするか。

gcloud

コンテナにホスト VM ディレクトリをマウントするには、--container-mount-host-path フラグを使用します。次の例では、ホスト ディレクトリ /tmp/logs でコンテナに読み取り / 書き込みモードでマウントしています。

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

読み取り専用モードでホスト ディレクトリをマウントするには、mode=ro を指定します。

コンテナのホスト ディレクトリ マウントを更新するには、gcloud compute instances update-container コマンドで --container-mount-host-path フラグを使用します。更新時に、指定したマウントパスに一致するボリューム マウントを削除するには、--remove-container-mounts フラグを使用します。次の例では、mount-path=/logs に一致するホスト パス マウントを削除しています。

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /logs

指定したマウントパスが存在しない場合には通知なく無視されます。

データ ボリュームとして tmpfs ファイル システムをマウントする

空の tmpfs ファイル システムをコンテナにマウントできます。

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] ボタンをクリックして新しいインスタンスを作成します。
  3. [コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] をオンにします。
  4. [コンテナの詳細オプション] をクリックします。
  5. [Tmpfs のマウント] で、[Add volume] をクリックします。
  6. マウントパス(tmpfs ボリュームをマウントするコンテナ ディレクトリ構造内のパス)を指定します。tmpfs ボリュームは、読み取り / 書き込みモードでマウントされます。

gcloud

空の tmpfs ファイル システムをコンテナにマウントするには、--container-mount-tmpfs フラグを使用します。次の例では、tmpfs ファイル システムを /cache でコンテナに読み取り / 書き込みモードでマウントしています。

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-mount-tmpfs mount-path=/cache

コンテナの tmpfs マウントを更新するには、gcloud compute instances update-container コマンドで --container-mount-tmpfs フラグを使用します。更新時に、指定したマウントパスに一致する tmpfs マウントを削除するには、--remove-container-mounts フラグを使用します。次の例では、mount-path=/cache に一致する tmpfs マウントを削除しています。

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /cache

指定したマウントパスが存在しない場合には通知なく無視されます。

コンテナポートの公開

コンテナを伴う VM ではホスト ネットワーク モードが使用されます。このモードでは、コンテナはホストのネットワーク スタックを共有し、ホストのインターフェースはすべてコンテナから使用可能です。

コンテナポートには、ホスト VM ポートへの 1 対 1 のマッピングがあります。たとえば、コンテナポート 80 はホスト VM ポート 80 にマップされ、マッピングが機能するためにポート パブリッシング(-p)フラグを指定する必要はありません。

コンテナのポートを公開するには、ホスト VM インスタンスのポートへのアクセスを許可するようにファイアウォール ルールを構成します。コンテナの対応するポートには、ファイアウォールのルールに従って自動的にアクセスできるようになります。

例: NGINX コンテナのポート 80 を公開する

次に、NGINX コンテナを使用して VM インスタンスを作成し、コンテナのポート 80 へのトラフィックを許可する方法の例を示します。

  1. NGINX コンテナを使用して VM インスタンスを作成します。

    gcloud compute instances create-with-container nginx-vm \
        --container-image gcr.io/cloud-marketplace/google/nginx1:1.12 \
        --tags http-server
    

    コンテナはホスト VM のネットワーク スタックを共有し、コンテナのポート 80 はホスト VM のポート 80 に対して公開されます。http-server タグは、次の手順で作成されるファイアウォール ルールのターゲットタグとして使用されます。

  2. VM インスタンスのポート 80 への接続を許可するファイアウォール ルールを作成します。次のファイアウォール ルールでは、http-server タグにより VM インスタンスに HTTP 接続できます。

    gcloud compute firewall-rules create allow-http \
        --allow tcp:80 --target-tags http-server
    

    コンテナは、自動的にポート 80 でトラフィックの受信を開始します。追加の構成を実行する必要はありません。

    プロトコルが tcp または udp の場合に、ホスト VM のプロトコル:ポートの組み合わせのためのファイアウォール ルールを作成することができます。このようなルールにより、VM 外から、対応するコンテナポートへのアクセスが効果的に管理されます。

フィードバックと質問

皆様のご意見やご質問をお聞かせください。ご質問、問題の報告、新しい機能のリクエストについては、Compute Engine のコンテナチームにお問い合わせください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント