Container-optimized Google Compute Engine imagesを使ってみる

GCEのインスタンスイメージの中には、インスタンス起動時のコマンドにオプションを指定することで、インスタンス起動と同時にそのインスタンスで稼働するコンテナを起動することができるものがある。これは、Container-optimized imageと呼ばれている。

ハンズオン

この記事では、Container-optimized imageを利用して、実際にインスタンス起動と同時にコンテナを起動してみる。

  1. 使用可能なContainer-optimized imageの確認

    まずは使用可能なContainer-optimized imageのイメージを確認する。Container-optimized imageはgoogle-containersプロジェクトにて管理されているので、–projectオプションでgoogle-containersを指定する。

    コマンドの結果、google-containersプロジェジェクトで最新のVMイメージはcontainer-vm-v20140826(記事執筆時現在)である。

  2. マニフェストファイルを準備する

    インスタンス起動時にコンテナを起動するためには、コンテナ情報を記載したyaml形式のマニュフェストファイルを定義する必要がある。マニュフェストフィアルの定義方法の詳細は、こちらに記載してある。下記の指定により、起動したコンテナはポート8080番でリッスンをし、アクセスがあれば”hello world!”の文字列をレスポンスする。

    ちなみに、ports以下の記述により、ホスト(Container-optimized imageを使って起動されるインスタンス)のポート8080番と作成されるコンテナのポート8080番がバインディングされるため、ホストの8080番にアクセスするとコンテナの8080番にアクセスすることができる。

  3. Container-optimized imageを使用したインスタンスの起動

    1で確認したcontainer-vm-v20140826イメージ、2で作成したyamlファイルを指定して、GAEインスタンスを起動する。
    数十秒程度でインスタンスが起動する。

  4. インスタンスへログインし、コンテナの起動を確認する

    gcloudコマンドでインスタンスへsshログインをした後、docker psコマンドを実行し、コンテナが起動していることを確かめる。

    想定通りhello world!がechoされ、コンテナが起動されていることを確認できた。

  5. 外部からコンテナにアクセスできるようにする

    ついでに、ホスト上からだけでなく、リモートからもアクセスできるようにしてみる。具体的には、8080番ポートのアクセス許可するfirewallの定義を作成する。

    次にアクセス先のインスタンスのIPアドレスを調べる。

    最後に対象インスタンスのexternal-ipのポート8080番にアクセスしてみる。

    無事にリモートからアクセスすることを確認することができた。

所感

いとも簡単にGCEインスタンスの起動と同時にコンテナを作成することが出来た。この技術自体はKubernetesの設計にもつながっている仕組みであり、コンテナのオーケストレーションのキーとなるような技術である!と感じた。この後は、複数コンテナの起動やらKubernetesを触ってみて勉強する予定です。