Google Cloud の Container-Optimized OS は、コンテナに最適化された Compute Engine VM 用のオペレーティングシステムイメージです。Docker ランタイムが既に入っているので、プロビジョニングも基本的に不要です。OSの自動更新や、ファイアウォールの遮断など、セキュリティ上の利点もいくつかあります。
多くの場合は、一つのコンテナではなく、複数のコンテナを同時に動かしたいので、docker-compose のようなツールを使います。しかし、Container-Optimized OS には docker-compose がインストールされておらず、VM インスタンスにソフトウェアパッケージを直接インストールすることもできないという制限がかかっています。
docker-compose を実行する方法
docker-compose を動かしたいなら、Docker が提供する docker/compose イメージを利用できます。
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd):$(pwd)" \
-w "$(pwd)" \
docker/compose:1.29.2 up
docker-compose コンテナが Docker デーモンにアクセスできるように、上記コードブロックの2行目で docker.sock
を Volume としてマウントしています。そして、手元の docker-compose.yaml ファイルを参照できるように、カレントディレクトリも Volume としてマウントし、-w
で移動します。
上記コマンドの書き方は、以下の記事で紹介されています。
毎回書くのが面倒な方は、alias
として登録するといいでしょう。
# ~/.bashrc
alias docker-compose='docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd):$(pwd)" \
-w "$(pwd)" \
docker/compose:1.29.2'
Airflow 環境を立ち上げる
さて、実際にコンテナ化した docker-compose コマンドを使ってアプリケーションを立ち上げましょう。私は Airflow をよく利用しているので、事例を挙げたいと思います。
まず、Compute Engine VM を作成します。
- マシンタイプ
e2-standard-4
を選択 - ブートディスクの OS を「Container Optimized OS」に、バージョンを最新 LTS に設定する(当時
93-16623.102.12 LTS
を使いました) - ファイアウォール設定で「HTTP トラフィックを許可する」にチェックを入れる
インスタンスを立ち上げたら、SSHでログインします。Airflow UI をブラウザーで開きたいので 8080
番ポートをフォーワーディングします。
gcloud --project *** compute ssh instance-1 --zone=asia-northeast1-a -- -L 8080:localhost:8080
次に Airflow のドキュメントの通り、フォルダーの作成と環境変数の設定を行います。
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
そして Airflow の公式 docker-compose.yaml をダウンロードします。
wget https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml
最後に、docker-compose コマンドで環境を立ち上げます。
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd):$(pwd)" \
-w "$(pwd)" \
docker/compose:1.29.2 up -d
1分ほど待ってから http://localhost:8080
をブラウザーでを開くと、ログイン画面が表示されます。ユーザー名とパスワードをどちらも airflow
と入力してログインすると、Airflow の管理画面が表示されます。
終わりに
以上、Google Cloud の Container-Optimized OS で docker-compose を使う方法について紹介しました。少しでもお役に立てられたらと思います。コンテナ化したアプリケーションのコンピュート環境として、Compute Engine VM + Container-Optimized OS の組み合わせがとても便利です。この記事で紹介したように、複数のコンテナ実行にも対応できるので、ぜひご検討ください。