始める前に
- コンテナについて理解を深めるために、Compute Engine のコンテナをご覧ください。
- Docker について理解を深めるために、Docker のドキュメントをお読みください。
- Compute Engine でのコンテナのデプロイをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
-
VM と MIG にコンテナをデプロイする際に使用するインスタンスまたはインスタンス テンプレートを作成するときは、Google Cloud コンソールまたは Google Cloud CLI を使用してコンテナ構成を指定します。
ここでは、VM インスタンスのオプションの構成方法について説明しますが、以下のオプションはインスタンス テンプレートの作成時にも構成できます。Google Cloud コンソールまたは Google Cloud CLI を使用して、インスタンス テンプレート内の VM インスタンスのオプションを構成します。
コンソール
[インスタンス テンプレートの作成] ページに移動します。
[コンテナ] セクションで、[この VM インスタンスにコンテナ イメージをデプロイします] チェックボックスをオンにし、[コンテナの詳細オプション] を開きます。
gcloud
- Google Cloud CLI で、次の例に示すように
gcloud compute instance-templates create-with-container
コマンドを使用します。
再起動ポリシーの指定
再起動ポリシーを設定すると、終了時にコンテナを再起動するかどうかを指定できます。デフォルトのポリシーは、常に再起動することです。障害発生時に再起動するようにすることも、再起動は行わないようにすることもできます。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [再起動ポリシー] セクションで、コンテナの再起動ポリシーを選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
VM 作成プロセスを続行します。
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 上で実行されているコンテナの再起動ポリシーを指定するには、--container-restart-policy
フラグを指定して gcloud compute instances update-container
コマンドを使用します。
特権モードでコンテナを実行する
特権モードでコンテナを実行すると、ホスト上のすべてのデバイスにアクセスできます。コンテナはデフォルトでは「非特権」として実行され、どのデバイスにもアクセスできません。
Console
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [権限のあるユーザーとして実行] を選択します。
- コンテナの詳細を確認するには、[選択] をクリックします。
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
ストリームを開いたままにする必要があります。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [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 の割り当てが必要です。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [疑似 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
コマンドをオーバーライドできます。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [コマンド] フィールドに、パラメータなしで単一の実行可能コマンドを入力します(例:
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
コマンドをオーバーライドすることもできます。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [引数] セクションで [引数を追加] をクリックします。
- ボックスごとに 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
の最後の値のみが取得されます。
Console
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [環境変数] セクションで、[変数を追加] をクリックします。
- 必要に応じて、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=admin
VM 上のコンテナの環境変数を更新するには、--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 からコンテナにディレクトリをマウントできます。
コンソール
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
[ボリュームのタイプ] リストから、[ディレクトリ] を選択し、次の操作を行います。
- [マウントパス] フィールドで、ホスト ディレクトリをマウントするコンテナ ディレクトリ構造にマウントパスを指定します。
- [ホストのパス] フィールドに、マウントするホスト ディレクトリのホストパスを指定します。
- [モード] リストで、ディレクトリを読み取り / 書き込みモードと読み取り専用モードのどちらでマウントするかを指定します。
コンテナの詳細を確認するには、[選択] をクリックします。
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 ファイル システムをコンテナにマウントできます。
Console
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
- [ボリュームのタイプ] リストから、[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 にアタッチされている必要があります。
パーティションレス デバイスとパーティションの両方がサポートされています。パーティションをマウントする場合、ディスクが空であってはなりません。既存のパーティション分割テーブルが含まれている必要があります。
Console
[インスタンスの作成] ページに移動します。
[コンテナ] セクションで、DEPLOY CONTAINERをクリックします。
[コンテナの構成] ページで、次の操作を行います。
- コンテナ イメージ名を指定します。
- [ボリュームのマウント] セクションで、[ボリュームを追加] をクリックします。
- [ボリュームのタイプ] リストから、[ディスク] を選択します。
- [マウントパス] フィールドで、永続ディスクをマウントするコンテナ ディレクトリ構造にパスを指定します。
- [ディスク名] リストから、マウントする既存のディスクを選択します。
- ディスクにパーティション テーブルが含まれる場合、マウントするパーティション番号を [パーティション] フィールドに指定します。ディスクにパーティションがない場合は、このフィールドを空白のままにします。
- [モード] リストで、ディレクトリを読み取り / 書き込みモードと読み取り専用モードのどちらでマウントするかを指定します。
- コンテナの詳細を確認するには、[選択] をクリックします。
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 を公開する
次に、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 について学習する。