※本稿で紹介するのは運用に耐えうる構成ではなく、あくまで Microsoft Azure Web App for Containers の便利さを伝えるためのデモ用の内容です。また、Web App for Containers の Multi-Container 機能の2019年4月時点のプレビュー版の情報を元にしており、仕様変更の可能性があります。
Azure Web App for Containers
Web App for Containers の Multi-Container 機能を使うと、複数コンテナからなるアプリケーションを簡単に Azure 上にデプロイできます。
ためしにオープンソースの wiki ツール GROWI を、3分で構築してみます。GROWI は Node.js アプリケーションと MongoDB のデーテベースの2つのコンテナがあれば最低限動作します。
構築手順
まず Microsoft Azure ポータルに入り、「リソースの作成」→「Web」→「Azure Web App for Containers」と進みます。
アプリ名がドメインになるので、好きな文字を入力します。
OS を Linux にして、「コンテナーの構成」をクリックします。
予め下記 docker-compose.yml
ファイルをローカルに作成しておくか 筆者のgist からダウンロードしておき、「Docker Compose (プレビュー)」をクリックし、「構成ファイル」からアップロードします。
version: '3'
services:
growi:
image: weseek/growi:3.4.4
links:
mongo: mongo
depends_on:
- mongo
environment:
MONGO_URI: mongodb://mongo:27017/growi
PASSWORD_SEED: superstrongpassword012345678901234567890123456789012345678901234 # ※適当に
volumes:
growi_data: /data
mongo:
image: mongo:3.6
ports:
27017:27017
volumes:
mongo_configdb: /data/configdb
mongo_db: /data/db
volumes:
growi_data:
mongo_configdb:
mongo_db:
「作成」ボタンを押して3分ぐらい待って https://(アプリ名).azurewebsites.net/
にアクセスすると、GROWIのトップページが映ると思います。
以上、YAML ファイルをアップロードするだけで GROWI を構築することができました。簡単ですね。
注意点
- 今回利用した
docker-compose.yml
は、一般的な記法と少々異なっています。- 例えば
environment:
がPASSWORD_SEED=seed
というイコールで繋ぐのではなくPASSWORD_SEED: seed
となっています。こうしないと Azure Web App ではうまく動かないようでした。
- 例えば
- elasticsearch をうまく動かす方法が不明だったため省略しています。この場合でも GROWI は起動するものの、検索が使えません。
- volumes の設定は効いていないようで、この構成だとアプリを再起動するたびに全データが消失します。
- 実際に GROWI を運用する場合には Azure Cosmos DB 等を使って永続化する構成になるんじゃないかと思います。
- そもそも GROWI は Amazon Web Services の S3 に依存しているので、Azure に立てるのは...
まだ実用レベルでは厳しいですが、docker-compose.yml
を(ほぼ)そのままアップロードするだけで3分待てば Web アプリケーションがクラウド上で動くというのは、かなり魅力的だと思います。