Web App for ContainersのMulti-Containerを試してみる

Build 2018でWeb App for ContainersのMulti-Containerがプレビューリリースされました。
[Multi-container support from Azure App Service](https://azure.microsoft.com/ja-jp/roadmap/app-service-multi-container-and-linux-support-for-ase-preview/)

元々単一コンテナーは展開できましたが、composeやk8sのpodをアップロードして、複数コンテナをデプロイできるようです。
早速試してみたいと思います。

# 環境準備
## Web App for Containersを作る
* Azure PortalのMarketplaceから[Web App on Linux]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/9f7072f2-970a-dc0a-9801-e500f7be2364.png)
<br>

* [アプリ名]、[リソースグループ]は適当に、App ServiceプランはB1サイズで作ります。Web App for ContainersはFree、Shareプランは選べません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/090e48a7-e760-1d82-a356-5ad0f66ccaa8.png)
<br>

* [コンテナーの構成]を選択すると、[Docker Compose]、[Kubernetes]のタグが増えてます！これまでは[単一コンテナー]しかありませんでした。今回はcomposeで試すので、[Docker Compose]を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/eda2ed12-a04e-a3d6-1b9a-b8adc8f9adb6.png)
<br>

* ここでdocker-compose.ymlをアップロードします。
* 今回はwordpressイメージとmysqlイメージを使ったwordpress環境を構築しようと思います。

## docker-compose.ymlを準備する
* こんな感じで作りました。

```docker:docker-compose.yml
version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
```

### composeファイルの書き方に注意！！
さらっと作りましたーって書いてますが、何度もデプロイに失敗してます。
プレビュー期間だからか、書き方に独特な箇所があります。私がハマったところを挙げていきます。

* 拡張子は.ymlにしましょう。.yamlだと動きません。
* environmentは＝ではなく：で繋ぎましょう

```text:NGパターン
MYSQL_USER=wordpress
```

```text:OKパターン
MYSQL_USER: wordpress
```

* depends_onは書いてもいいですが、現時点では動作しません。（そのうちサポートするようです）  
  なので、後続処理（ここではmysql）から先に書いています。
* 今回の例では書いていませんが、commandはリスト形式で書きましょう

```text:NGパターン
command: bundle exec thin -p 3000
```

```text:OKパターン
command: ["bundle", "exec", "thin", "-p", "3000"]
```

## デプロイする
* ファイル選択から、作成したdocker-compose.ymlを選びます。選ぶと下の構成欄にファイルの内容が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/688571bc-f34c-147b-ff32-6baf02d2d401.png)
<br>

* [OK]を押して、Web Apps for Containersを作成します。

# デプロイされたか確認してみる
* Web Appの概要画面にいきます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/2ab13238-1c48-9880-cddf-07fa3e0d3ef6.png)
<br>

* 左メニューより[設定]→[コンテナーの設定]を選択します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/6587e43e-0b2f-4b50-1530-f1702aee7b30.png)
<br>

* ログウィンドウにイメージpullの状況がでてくるので完了するまで待ちます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/a638db73-b643-7edf-831d-b25eafae08ee.png)
<br>

* [最新の情報に更新]ボタンは残念ながら全く反応しないので画面を切り替えながら確認しましょう
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/0143e3de-352c-512c-78f2-e28517e93361.png)
<br>

* wordpressイメージのdocker runまでログに出たら無事完了です。
* 概要ページに戻り、URLを開いて確認してみましょう。
* 無事wordpress環境が起動しました！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/a96171cd-3994-cc76-4d70-d81f78aff8e4.png)

## デプロイに失敗したら？
docker-compose.ymlを修正して、アップデートし直しましょう。
ただ何回もアップロードやってるとなぜか反応しなくなることがあります・・・

# まとめ
プレビューなので残念なところはあるものの、Web AppsとDockerって相性よさそうだなと思いました。
スワップとかも使えそうですし、基盤がApp Serviceなので安心感があります。
システムによってはAKSといったオーケストレーターがいらないパターンもあるのでは？と思います。

リリースが楽しみですね！