5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Microsoft Azure TechAdvent Calendar 2018

Day 13

Azure Web Apps on Linux から for Container に変換する step-by-step

Last updated at Posted at 2018-12-14

#はじめに:
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

また見直して更新します。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?