Azure App Service on Linux で Docker る

Azure App Service に Linux がやってきたのは皆さん既にご存知の通りでしょう。特に Node.js アプリは iisnode で動かすよりも PM2 が採用された App Service on Linux で動かしたほうが遥かに信頼性が期待できますね。ところで、今月 Docker カスタムイメージもデプロイできるようになりました。ぜひ試してみましょう。

今回の概要

所要時間は概ね10分以内だと思います。 例に利用する Docker Hub イメージは uzyexe/reichat です。

  1. 作成
    コンテナーの構成にカスタム Docker イメージを指定
  2. 設定
    ポート番号の指定
  3. 完了
    デプロイされたウェブサイト(アプリ)を確認
  4. トラブルシューティング
    Docker image デプロイに関するログの確認方法

1. 作成

さて、Azure Portal から新規作成します。サブスクリプションをお持ちの方はこのリンクからすぐに作成画面に移動できます

まずは従来の App Service と同じ要領で、アプリ名を入力し、リソースグループ、 App Service Plan を選択します。

コンテナ―の構成を下記の通り変更します。 Docker Hub にて公開されている reichat を使ってみます: uzyexe/reichat:latest

作成。

リソースが作られました。

2. 設定

もう Docker コンテナーはデプロイされた状態になっていますが、このままでは URL を開いてもアクセスできません。コンテナ内で動いているサーバー(=Node.js)のポートを教えてあげる必要があります。

アプリケーション設定 → アプリ設定 に PORT: 10133 (コンテナ内のアプリが listen しているポート番号です) を設定します。ついでに、アプリがステートレスの場合は ARR アフィニティをオフにしましょう。

保存を忘れずに。問題がなければもうアプリにアクセスできるはずです。

3. 完了

もうできました。 Docker は素晴らしいですね。

4. トラブルシューティング

Docker コンテナーが正常にデプロイされているかどうか、アプリが正常に動いているか等、ログを確認するには Advanced Tools (=Kudu) を使います。

ログは /home/logFiles/docker/ に吐き出されています。Portal からもっと気軽に確認できるようになるといいですね。

Docker はいいぞ

Azure App Service on Linux も良さそうだぞ

個人的な感想としては、IISを必要としない Node.js アプリなんかは Azure App Service on Linux ないし Docker でデプロイした方が従来(iisnode)と比べて遥かに楽だと思います。非常にシンプルですし、問題の切り分けもやりやすいです。

p.s. まだ WebSocket が使えないみたいなんですが、早く使えるようにならないかなー(チラチラ