VM またはマネージド インスタンス グループ(MIG)内の各 VM で単一のコンテナを実行できます。これを行うには、VM インスタンスまたはインスタンス テンプレートを作成するときに、コンテナ イメージと構成パラメータを指定します。
このドキュメントでは、Compute Engine インスタンスでコンテナを実行するための構成オプションについて説明します。
始める前に
- コンテナについて理解を深めるために、Compute Engine のコンテナをご覧ください。
- Docker について理解を深めるために、Docker のドキュメントをお読みください。
- Compute Engine でのコンテナのデプロイをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
- Set a default region and zone.
VM と MIG にコンテナをデプロイする際に使用するインスタンスまたはインスタンス テンプレートを作成するときは、 Google Cloud コンソールまたは Google Cloud CLI を使用してコンテナ構成を指定します。
以降のセクションでは、VM インスタンスでコンテナを構成する方法について説明しますが、以下のオプションはインスタンス テンプレートの作成時にも構成できます。 Google Cloud コンソールまたは Google Cloud CLI を使用して、インスタンス テンプレート内の VM インスタンスのオプションを構成します。
docker runコマンドを使用して、Container-Optimized OS を実行している VM インスタンスでコンテナを構成できます。また、起動スクリプトでdocker runコマンドを指定して、VM を作成して構成することもできます。詳細については、起動スクリプトを使用して VM にコンテナをデプロイするをご覧ください。再起動ポリシーの指定
再起動ポリシーを設定すると、終了時にコンテナを再起動するかどうかを指定できます。デフォルトのポリシーは、常に再起動することです。障害発生時に再起動するようにすることも、再起動は行わないようにすることもできます。
docker run
docker runコマンドの--restartフラグを使用します。コンテナの再起動を何度も繰り返そうとするのは、Docker の--restartリファレンスに指定された Docker のデフォルトの動作です。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [再起動ポリシー] セクションで、コンテナの再起動ポリシーを選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
コンテナに再起動ポリシーを指定するには、
--container-restart-policyフラグを使用します。always(デフォルト)on-failurenever
次の例では、
on-failure再起動ポリシーを使用してコンテナを起動します。つまり、コンテナの終了コードがゼロでない場合にのみ再起動が行われます。gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-restart-policy on-failure
VM 上で実行されているコンテナの再起動ポリシーを指定するには、
--container-restart-policyフラグを指定してgcloud compute instances update-containerコマンドを使用します。特権モードでコンテナを実行する
特権モードでコンテナを実行すると、ホスト上のすべてのデバイスにアクセスできます。コンテナはデフォルトでは「非特権」として実行され、どのデバイスにもアクセスできません。
docker run
docker runコマンドの--privilegedフラグを使用します。詳細については、ランタイム権限と Linux の機能をご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [権限のあるユーザーとして実行] を選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
ランタイム権限のあるコンテナを実行するには、
--container-privilegedフラグを使用します。次の例では、特権モードで busybox コンテナを起動しています。gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-privileged
VM 上のコンテナを更新するには、
--container-privilegedフラグを指定してgcloud compute instances update-containerコマンドを使用します。特権モードをオフにするには、--no-container-privilegedフラグを使用します。コンテナ ランタイムに STDIN のバッファを割り当てる
コンテナ ランタイムに
STDINのバッファを割り当てると、コンテナでSTDINストリームを開いたまま維持できます。設定しない場合、コンテナでのSTDINからの読み取りが常にEOFになります。コンテナ内で対話型シェルを設定する場合や、パイプからの標準入力をコンテナで受け取れるようにする場合は、疑似 TTY を割り当てると同時に、
STDINストリームを開いたままにする必要があります。docker run
docker runコマンドの--interactive(-i)フラグを使用します。詳細については、--interactiveフラグのドキュメントをご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [STDIN のバッファの割り当て] を選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
コンテナ ランタイムに
STDINのバッファを割り当てるには、--container-stdinフラグを使用します。次の例では、コンテナを起動し、STDINを開いたままにしています。gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-stdin
VM 上のコンテナを更新するには、
--container-stdinフラグを指定してgcloud compute instances update-containerコマンドを使用します。STDINのバッファの割り当てをオフにするには、--no-container-stdinフラグを使用します。疑似 TTY を割り当てる
コンテナに対話型シェルを設定するには、STDIN のバッファの割り当てに加え、コンテナの疑似 TTY の割り当てが必要です。
docker run
docker runコマンドの--tty (-t)フラグを使用します。詳細については、--ttyフラグをご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [疑似 TTY の割り当て] を選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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 上のコンテナを更新するには、
--container-ttyフラグを指定してgcloud compute instances update-containerコマンドを使用します。疑似 TTY を割り当てるには、--no-container-ttyフラグを使用します。コンテナの起動時に実行するデフォルトのコマンドをオーバーライドする
コンテナ イメージの
ENTRYPOINTでは、コンテナの起動時に実行する実行可能ファイルを指定します。これによって、コンテナをその実行可能ファイルのバイナリであるかのように実行できます。コンテナ イメージの
ENTRYPOINTコマンドをオーバーライドできます。docker run
docker runコマンドの--entrypointフラグ(コマンドのみ、引数なし)を使用します。ENTRYPOINTフラグと--entrypointフラグの詳細をご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [コマンド] フィールドに、パラメータなしで単一の実行可能コマンドを入力します(例:
uptime)。 - コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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 上のコンテナのコマンドを更新するには、
--container-commandフラグを指定してgcloud compute instances update-containerコマンドを使用します。更新したコンテナのデフォルトのコマンドをクリアするには、
--clear-container-commandフラグを指定してupdate-containerコマンドを使用します。コンテナの ENTRYPOINT コマンドに引数を渡す
コンテナの
ENTRYPOINTコマンドに引数を渡す(追加する)ことも、デフォルトのコンテナのCMDコマンドをオーバーライドすることもできます。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [引数] セクションで [引数を追加] をクリックします。
- ボックスごとに 1 つのコマンド引数を入力します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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 上で実行されているコンテナのコマンド引数を更新するには、
--container-argフラグを指定してgcloud compute instances update-containerコマンドを使用します。この更新によって、引数リスト全体が新しいリストに置き換えられます。コンテナ宣言からすべての引数を削除するには、
--clear-container-argsフラグを指定してupdate-containerコマンドを使用します。ログドライバ オプションの構成
ログドライバ オプションを構成する必要がある場合は、VM 起動スクリプトを作成し、必要なロギング オプションを使用して Docker 構成ファイルを更新できます。これらのオプションは、VM で実行され、ログドライバ オプションを指定しないすべてのコンテナに適用されます。
たとえば、次の起動スクリプトでは、コンテナのログサイズを制限するオプションなど、複数のオプションを設定してから、VM で Docker を再起動します。
cat <<EOF > /etc/docker/daemon.json { "live-restore": true, "storage-driver": "overlay2", "log-opts": { "max-size": "10m" } } EOF systemctl restart docker環境変数の設定
コンテナで環境変数を設定できます。
KEYが複数回繰り返されるときには、KEYの最後の値のみが取得されます。docker run
docker runコマンドの--envフラグを使用します。Docker エンジンで環境変数を設定する方法をご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [環境変数] セクションで、[変数を追加] をクリックします。
- 必要に応じて、1 行に 1 つずつ環境変数を追加または削除します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
コンテナで環境変数を設定するには、
--container-envフラグを使用します。次の例では、HOME、MODE、OWNERの 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=adminVM 上のコンテナの環境変数を更新するには、
--container-envフラグまたは--container-env-fileフラグを指定してgcloud compute instances update-containerコマンドを使用します。これによって、VM インスタンスのコンテナ宣言に含まれるすべての変数が更新されます。コンテナ宣言に含まれていない変数は追加されます。VM 上のコンテナを更新するときに環境変数を削除するには、
--remove-container-envフラグを使用します。次の例では、MODEとOWNERという環境変数を削除しています。gcloud compute instances update-container busybox-vm \ --remove-container-env MODE,OWNER
指定した環境変数が存在しない場合には通知なく無視されます。
データ ボリュームとしてホスト ディレクトリをマウントする
ホスト VM からコンテナにディレクトリをマウントできます。
docker run
docker runコマンドのtype=bindマウントで--volumeフラグと--mountフラグを使用します。Docker エンジンでデータ ボリュームとしてホスト ディレクトリをマウントする方法をご覧ください。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
[ボリュームのタイプ] リストから、[ディレクトリ] を選択し、次の操作を行います。
- [マウントパス] フィールドで、ホスト ディレクトリをマウントするコンテナ ディレクトリ構造にマウントパスを指定します。
- [ホストのパス] フィールドに、マウントするホスト ディレクトリのホストパスを指定します。
- [モード] リストで、ディレクトリを読み取り / 書き込みモードと読み取り専用モードのどちらでマウントするかを指定します。
コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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を指定します。コンテナのホスト ディレクトリのマウントを更新するには、
--container-mount-host-pathフラグを指定してgcloud compute instances update-containerコマンドを使用します。指定したマウントパスに一致するボリューム マウントを削除するには、--remove-container-mountsフラグを使用します。次の例では、mount-path=/logsに一致するホストパス マウントを削除しています。gcloud compute instances update-container busybox-vm \ --remove-container-mounts /logs
指定したマウントパスが存在しない場合には通知なく無視されます。
データ ボリュームとして tmpfs ファイル システムをマウントする
空の tmpfs ファイル システムをコンテナにマウントできます。
空の tmpfs ファイル システムは、
medium:Memoryを設定した Google Kubernetes EngineEmptyDirボリュームに似ています。Docker ではコンテナの再起動時にtmpfsデータが削除されますが、Compute Engine コンテナでtmpfsを使用した場合には、コンテナを再起動してもボリュームとそのデータは保持され、VM を再起動した場合にのみ削除されます。コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
- [ボリュームのタイプ] リストから、[TmpFS] を選択します。
- [マウントパス] フィールドで、TmpFS ボリュームをマウントするコンテナ ディレクトリ構造にマウントパスを指定します。
- [モード] リストで、TmpFS ボリュームを読み取り / 書き込みモードと読み取り専用モードのどちらでマウントするかを指定します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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マウントを更新するには、--container-mount-tmpfsフラグを指定してgcloud compute instances update-containerコマンドを使用します。更新時に指定したマウントパスに一致するtmpfsマウントを削除するには、--remove-container-mountsフラグを使用します。次の例では、mount-path=/cacheに一致するtmpfsマウントを削除しています。gcloud compute instances update-container busybox-vm \ --remove-container-mounts /cache
指定したマウントパスが存在しない場合には通知なく無視されます。
データ ボリュームとして永続ディスクをマウントする
Container-Optimized OS 69 以降では、ホスト VM からコンテナに永続ディスクをマウントできます。
前提条件
- ディスクに
ext4ファイル システムがあるか、ファイル システムが 1 つもないかのどちらかでなければなりません。初期ファイル システムがなければ、コンテナの起動エージェントがディスクをext4にフォーマットします。この場合、読み取り / 書き込みモードのアタッチとマウントのみがサポートされます。 - ディスクが VM にアタッチされている必要があります。
パーティションレス デバイスとパーティションの両方がサポートされています。パーティションをマウントする場合、ディスクが空であってはなりません。既存のパーティション分割テーブルが含まれている必要があります。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、コンテナをデプロイをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
- [ボリュームのタイプ] リストから、[ディスク] を選択します。
- [マウントパス] フィールドで、永続ディスクをマウントするコンテナ ディレクトリ構造にパスを指定します。
- [ディスク名] リストから、マウントする既存のディスクを選択します。
- ディスクにパーティション テーブルが含まれる場合、マウントするパーティション番号を [パーティション] フィールドに指定します。ディスクにパーティションがない場合は、このフィールドを空白のままにします。
- [モード] リストで、ディレクトリを読み取り / 書き込みモードと読み取り専用モードのどちらでマウントするかを指定します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
永続ディスクをコンテナにマウントするには、
gcloud compute instances create-with-containerコマンド、または--container-mount-diskフラグを指定したgcloud compute instances update-containerコマンドを使用します。次の例では、
my-data-diskとmy-scratch-diskの 2 つのディスクを、/disks/data-diskおよび/disks/scratch-diskマウントパスにあるコンテナにマウントします。gcloud compute instances create-with-container busybox-vm \ --disk name=my-data-disk \ --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \ --container-image docker.io/busybox:1.27 \ --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \ --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk
--diskフラグでmy-data-diskの接続、--create-diskフラグでmy-scatch-diskの作成と接続、--container-mount-diskフラグで接続されたディスクのコンテナへのマウントを指定しています。my-scratch-diskのmodeは指定されていないため、このディスクはデフォルトの読み取り / 書き込みモードでコンテナにマウントされます。他の接続済みディスクをマウントする場合や、既存のディスクのマウントを変更する場合は、
--container-mount-diskフラグを指定したgcloud compute instances update-containerコマンドを使用します。指定したマウントパスに一致するディスク ボリュームのマウントを削除するには、
--remove-container-mountsフラグを使用します。次の例では、my-data-diskのマウントモードを読み取り / 書き込みに変更し、mount-path="/disks/scratch-disk"を指定してディスク マウントを削除しています。gcloud compute instances update-container busybox-vm \ --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \ --remove-container-mounts "/disks/scratch-disk"
--remove-container-mountsフラグに渡したマウントパスが存在しない場合は、通知なく無視されます。コンテナポートの公開
コンテナを伴う VM ではホスト ネットワーク モードが使用されます。このモードでは、コンテナはホストのネットワーク スタックを共有し、ホストのインターフェースはすべてコンテナから使用可能です。
コンテナポートには、ホスト VM ポートへの 1 対 1 のマッピングがあります。たとえば、コンテナポート 80 はホスト VM ポート 80 にマップされます。Compute Engine ではポートの公開(
-p)フラグをサポートしていないため、このフラグを指定しなくても、マッピングは機能します。コンテナのポートを公開するには、ホスト VM のポートへのアクセスを許可するようにファイアウォール ルールを構成します。コンテナの対応するポートには、ファイアウォールのルールに従って自動的にアクセスできるようになります。
例: NGINX コンテナのポート 80 を公開する
docker run
docker runコマンドを使用するときに、--network="host"フラグを構成します。コンテナのネットワーク設定とホストモードをご覧ください。gcloud
次に、NGINX コンテナを使用して VM インスタンスを作成し、コンテナのポート 80 へのトラフィックを許可する方法の例を示します。
NGINX コンテナを使用して VM インスタンスを作成します。
gcloud compute instances create-with-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:1.15 \ --tags http-server
コンテナはホスト VM のネットワーク スタックを共有し、コンテナのポート 80 はホスト VM のポート 80 に対して公開されます。
http-serverタグは、次の手順で作成されるファイアウォール ルールのターゲットタグとして使用されます。VM インスタンスのポート 80 への接続を許可するファイアウォール ルールを作成します。次のファイアウォール ルールでは、
http-serverタグが設定された VM インスタンスへの HTTP 接続を許可します。gcloud compute firewall-rules create allow-http \ --allow tcp:80 --target-tags http-server
コンテナは、自動的にポート 80 でトラフィックの受信を開始します。追加の構成を行う必要はありません。
ホスト VM のプロトコル:ポートの組み合わせに対するファイアウォール ルールを作成できます。ここで、プロトコルは
tcpまたはudpです。このようなルールにより、VM 外から該当するコンテナポートへのアクセスが効果的に管理されます。
次のステップ
- Compute Engine に Docker コンテナをデプロイする方法を習得する。
- Container-Optimized OS について学習する。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-10-19 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["わかりにくい","hardToUnderstand","thumb-down"],["情報またはサンプルコードが不正確","incorrectInformationOrSampleCode","thumb-down"],["必要な情報 / サンプルがない","missingTheInformationSamplesINeed","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-10-19 UTC。"],[],[]] -