はじめに:
Azure Web Apps on Linux は、"Blessed Image" と呼ばれる、アプリケーションスタックによって何種類かある作成済みのコンテナを使用しています。このコンテナはアプリケーションレベルでのカスタマイズは可能ですが、それ以上のカスタマイズとなるとカスタムコンテナを作成して、Web Apps for Container でホストすることになります。
「でもいきなりカスタムコンテナなんて怖い!」という方のために、まずは出来合いの Web Apps for Linux のコンテナをパクって Web Apps for Container でホストする手順を書いてみました。
前提事項:
以下 Windows 環境で実施する場合です。必要なものは以下の通り。
- Azure の Subscription
- Azure CLI のインストール(または Cloud Shell の使用)
- Docker for Windows のインストール
- Git for Windows のインストール
- オプション:Kitematic をダウンロードして適切なフォルダに解凍
手順:
適当なフォルダを作ってコマンドプロンプトで開きます
Github から Web Apps on Linux の blessed イメージのソースを clone します。以下は node.js のコンテナです。
git clone https://github.com/Azure-App-Service/node.git --config core.autocrlf.false
- 適当な docker イメージのフォルダへ移動します
cd node/10.10.0
- docker イメージをビルドします。なお、DOCKER ファイル等をいじる場合はこの前に行います
docker build -t mynode:latest .
...
Successfully built ef9dda6f3a07
Successfully tagged mynode:latest
- ビルドした docker イメージを実行してみます(以下必要最低限の docker run のため、適宜調整してください)
docker run --rm mynode:latest
localhost:2222 にブラウザでアクセスして hostingstart.html が表示される事を確認します。Ctrl+C でコンソールを抜けるとイメージが動き続けるので、Kitematic で止めてください。中身書き換えて永続化したければ docker commit してください
Azure Container Registry(ACR)を作っておきます。ポータルでも CLI でもお好きに
ACR に push するために、まずパスワードを取得します。以下 Azure CLI ですが、Cloud Shell で実行しても構いません
az login
az acr credential show --name <ACR名>
...
{
"passwords": [
{
"name": "password",
"value": "xxxx"
},
{
"name": "password2",
"value": "xxxx"
}
],
"username": "nnnn"
}
- docker から ACR にログインします
docker login <ACR名>.azurecr.io -u <上記 username> -p <上記 password>
- push する前に docker イメージの ID を確認しておきます
docker images
...
REPOSITORY TAG IMAGE ID CREATED SIZE
mynode latest ef9dda6f3a07 15 minutes ago 145MB
- ローカルイメージにタグ付けします
docker tag <IMAGE ID> <ACR名>.azurecr.io/mynode:latest
- タグ付けできたことを確認しておきます
docker images
...
REPOSITORY TAG IMAGE ID CREATED SIZE
<ACR名>.azurecr.io/mynode latest ef9dda6f3a07 21 minutes ago 145MB
- ACR に push します
docker push <ACR名>.azurecr.io/mynode:latest
- あとは Web Apps for Containers を ACR を参照するように作成します。コンテナログは [コンテナーの設定] ブレードから見ることが出来ます。以下、例。
2018_11_28_..._docker.log:
2018-11-28 08:14:22.127 INFO - Starting container for site
2018-11-28 08:14:22.127 INFO - docker run -d -p 48559:8080 --name <Web Apps 名>_0 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=<Web Apps 名> -e WEBSITE_AUTH_ENABLED=False -e PORT=8080 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=... <ACR 名>.azurecr.io/mynode:latest
2018-11-28 08:14:22.127 INFO - Logging is not enabled for this container.
Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.`
もろもろ
※ ローカルでコンテナ上がらないとかはだいたい CRLF のせい。clone したファイルが LF になってるか確認し、もしなってなかったら VSCode とかで変換します
※ コンテナのビルドや起動の時間はコンテナサイズに依存します。今のところ node の blessed イメージが一番軽いです。php は node の6倍近くあります。node < ruby < php
また見直して更新します。