[Azure] Web App On Linux を nginx で動かす

まだまだプレビュー中の Web App On Linux ですが、内部的にはDockerコンテナが採用されています。

ビルトインのランタイムを選ぶと、Webサーバには apache が設定されたコンテナが起動しますが、nginx で動かすこともできるので試してみました。

ビルトインのランタイム(これらはapacheになります)：
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/ddab3984-1098-be2f-fd2a-8252af69f2df.png)

# Dockerコンテナ作成

まず、nginxが動作するコンテナが必要なので、作成してDocker Hubに登録します。

未登録の場合は [Docker Hub](https://hub.docker.com/) にサインアップしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/fb98132d-ae5b-e1c0-8850-47d25e543106.png)

作成したアカウントでログインしておきます。

```bash
$ docker login
Username: 
Password: 
```

今回は起動を試してみるだけなのでpublicのnginxイメージを使用します。

```bash
$ docker image ls nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              958a7ae9e569        2 weeks ago         109MB
```

そのままnginxtestという名称で起動します。初回はpullしてくるので少し時間がかかります。

```bash
$ docker run --name nginxtest -p 8001:80 -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
※略※
Digest: sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268
Status: Downloaded newer image for nginx:latest
5ae9cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfccc5d
```

docker psコマンドで起動したことを確認します。

```bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
5ae9cxxxxxxx        nginx               "nginx -g 'daemon ..."   6 minutes ago       Up 6 minutes        0.0.0.0:8001->80/tcp   nginxtest
```

これをそのまま実行してもいいのですが、動作確認用に少しだけ変更しておきます。vimがインストールされていなかったのでインストールし、index.htmlを少し編集します。

```bash
$ docker exec -it nginxtest /bin/bash
root@5ae9c05b31fd:/# apt-get install vim
※略※
root@5ae9c05b31fd:/# vim /usr/share/nginx/html/index.html
```

今回はタイトルを少しだけ変更してみました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/3ebfe7be-57f3-4f62-38b4-c103477a9b49.png)

変更したイメージをDocker Hubにpushします。

```bash
$  docker stop nginxtest
nginxtest
$ docker commit -m "hello world" nginxtest nakatsukasa/nginxtest
sha256:d110e08xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ docker push nakatsukasa/nginxtest
The push refers to a repository [docker.io/nakatsukasa/nginxtest]
c0e8abf3a3bd: Pushed
※略※
latest: digest: sha256:d110e08xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx size: 1160
```

以上でDocker側の作業が終了しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/c85e8730-499d-0a62-b988-da21ce0395fa.png)

# Web App On Linux作成

ポータルで新規 -> 「Web App On Linux (プレビュー)」からWebAppを作成します。
「イメージのソース」で"Docker Hub"を選び、pushしたタグを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/a050c980-72f1-5fc2-8a98-cd64d8356e43.png)

# 動作確認

作成したWebAppにブラウザでアクセスすれば、変更したindex.htmlが表示されることを確認できます（スクリーンショットが上と一緒ですが．．．）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/172826/5833c380-4cc2-c5a3-b02d-16ded23a1359.png)

以上で nginx コンテナが実行できることが確認できました。

# 注意事項
- 今回はDocker Hubのpublicリポジトリで試しましたが、外部公開しないものはprivateリポジトリを使用して下さい。
- WebAppのアクセス制限(windows版ではweb.config)は、nginx側での対応が必要です。nginx.confファイルに設定を追加して下さい。
- 実利用の(テスト用途ではない)WebAppでは、永続化のためリンクを張る必要があります。参考資料の13ページを参照して下さい。

# 参考資料
- [de:code 2017セッション : ご注文は Linux + Docker ですか? Windows だけじゃない App Service を  切る](https://docs.com/shibayan/8131/linux-docker-windows-app-service?c=X3Vz9L&fromR=1)