Azure でカスタム コンテナーを実行する

Azure App Service は、IIS 上で稼働する ASP.NET や IIS 上で稼働する Node.js など、Windows 上の定義済みのアプリケーション スタックを提供します。 事前構成済みの Windows コンテナー環境では、オペレーティング システムは、管理アクセス、ソフトウェアのインストール、グローバル アセンブリ キャッシュへの変更などができないようにロックされます。 詳細については、「Azure App Service におけるオペレーティング システムの機能」を参照してください。 アプリケーションから利用すべき領域が事前構成済みの環境を超える場合は、カスタムの Windows コンテナーをデプロイすることで対応できます。

このクイックスタートでは、Visual Studio から Docker Hub に、Windows イメージで ASP.NET アプリをデプロイする方法について説明します。 アプリは、Azure App Service のカスタム コンテナーで実行します。

注意

Windows コンテナーは Azure Files に限定されており、現時点では Azure Blob はサポートされていません。

前提条件

このチュートリアルを完了するには、以下が必要です。

ASP.NET Web アプリを作成する

次の手順に従って ASP.NET Web アプリを作成します。

  1. Visual Studio を開き、 [新しいプロジェクトの作成] を選択します。

  2. [新しいプロジェクトの作成] で、C# の [ASP.NET Web アプリケーション (.NET Framework)] を選択し、 [次へ] を選択します。

  3. [新しいプロジェクトの構成] で、アプリケーションに myfirstazurewebapp という名前を付け、 [作成] を選択します。

    Web アプリ プロジェクトを構成する

  4. 任意の種類の ASP.NET Web アプリを Azure にデプロイできます。 このクイックスタートでは、 [MVC] テンプレートを選択します。

  5. [Docker サポート] を選択し、認証が [認証なし] に設定されていることを確認します。 [作成] を選択します

    ASP.NET Web アプリケーションを作成する

  6. Dockerfile ファイルが自動的に開かない場合は、ソリューション エクスプローラー から開きます。

  7. サポートされている親イメージが必要です。 FROM 行を次のコードに置き換えることで親イメージを変更し、ファイルを保存します。

    FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
    
  8. Visual Studio のメニューから [デバッグ] > [デバッグなしで開始] の順に選択して、Web アプリをローカルで実行します。

    アプリをローカルで実行する

Docker Hub に発行する

  1. ソリューション エクスプローラーmyfirstazurewebapp プロジェクトを右クリックし、 [発行] を選択します。

  2. App Service を選択し、 [発行] を選択します。

  3. [発行先を選択][コンテナー レジストリ][Docker Hub] を選択し、 [発行] をクリックします。

    プロジェクトの概要ページから発行する

  4. Docker Hub アカウントの資格情報を指定し、 [保存] を選択します。

    デプロイが完了するまで待ちます。 [発行] ページに、後で使用するリポジトリ名が表示されるようになります。

    リポジトリ名が強調表示されているスクリーンショット。

  5. 後で使用するのでこのリポジトリ名をコピーします。

Windows コンテナー アプリの作成

  1. Azure portal にサインインします。

  2. Azure portal の左上隅にある [リソースの作成] を選択します。

  3. [人気のあるサービス][Web アプリ] で、 [作成] を選択します。

  4. [Web アプリの作成] で、サブスクリプションと リソース グループ を選択します。 必要な場合は、新しいリソース グループを作成できます。

  5. アプリ名 (win-container-demo など) を指定します。 [発行][Docker コンテナー][オペレーティング システム][Windows] を選択します。 Docker を選択して続行します。

    Web App for Containers を作成する

  6. [イメージのソース][Docker Hub] を選択し、 [イメージとタグ] に、「Docker Hub に発行する」でコピーしたリポジトリ名を入力します。

    Web App for Containers を構成する

    Azure Container Registry や他のプライベート リポジトリなど、どこか他の場所に目的の Web アプリケーションのカスタム イメージがある場合は、ここで構成することができます。

  7. [確認と作成][作成] の順に選択して、必要なリソースが Azure によって作成されるまで待ちます。

コンテナー アプリにブラウザーでアクセスする

Azure の処理が完了すると、通知ボックスが表示されます。

デプロイメント成功

  1. [リソースに移動] をクリックします。

  2. このリソースの概要で、 [URL] の横にあるリンクに移動します。

新しいブラウザー ページが開いて次のページが表示されます。

Windows コンテナー アプリ (起動中)

数分待ってから再試行すると、既定の ASP.NET ホーム ページが表示されます。

Windows コンテナー アプリ (実行中)

お疲れさまでした。 初めてのカスタム Windows コンテナーを Azure App Service で実行することができました。

コンテナーの起動ログの表示

Windows コンテナーが読み込まれるまでにしばらく時間がかかる場合があります。 進行状況を確認するには、 <app_name> をアプリの名前に置き換えて次の URL に移動します。

https://<app_name>.scm.azurewebsites.net/api/logstream

次のようなログがストリーム配信されます。

2018-07-27T12:03:11  Welcome, you are now connected to log-streaming service.
27/07/2018 12:04:10.978 INFO - Site: win-container-demo - Start container succeeded. Container: facbf6cb214de86e58557a6d073396f640bbe2fdec88f8368695c8d1331fc94b
27/07/2018 12:04:16.767 INFO - Site: win-container-demo - Container start complete
27/07/2018 12:05:05.017 INFO - Site: win-container-demo - Container start complete
27/07/2018 12:05:05.020 INFO - Site: win-container-demo - Container started successfully

ローカルで更新して再デプロイする

  1. Visual Studio の ソリューション エクスプローラー から、 [表示] > [ホーム] > [Index.cshtml] の順に開きます。

  2. 上部の <div class="jumbotron"> HTML タグを検索し、要素全体を次のコードに置き換えます。

    <div class="jumbotron">
        <h1>ASP.NET in Azure!</h1>
        <p class="lead">This is a simple app that we've built that demonstrates how to deploy a .NET app to Azure App Service.</p>
    </div>
    
  3. Azure に再デプロイするには、ソリューション エクスプローラーmyfirstazurewebapp プロジェクトを右クリックし、 [発行] を選択します。

  4. 発行ページで [発行] を選択し、発行が完了するまで待ちます。

  5. App Service に Docker Hub から新しいイメージをプルするよう指示するには、アプリを再起動します。 ポータルでアプリ ページに戻り、 [再起動] > [はい] をクリックします。

    Azure で Web アプリを再起動する

再びコンテナー アプリにブラウザーでアクセスします。 Web ページを更新すると、アプリは最初に "起動" ページに戻った後、数分すると更新された Web ページが再び表示されます。

Azure での更新された Web アプリ

次のステップ

または、他のリソースを参照してください。

App Service on Linux は、事前定義済みのアプリケーション スタックを Linux 上で提供し、.NET、PHP、Node.js などの言語をサポートします。 まだ Azure で定義されていないアプリケーション スタックで Web アプリを実行する場合にも、カスタム Docker イメージを使用できます。 このクイックスタートでは、Azure Container Registry (ACR) から App Service にイメージをデプロイする方法について説明します。

前提条件

コンテナー レジストリを作成する

このクイックスタートでは、選択するレジストリとして Azure Container Registry を使用します。 他のレジストリは自由に使用できますが、手順は若干異なる場合があります。

Azure portal を使用してプライベート コンテナー レジストリを作成するためのクイックスタートの手順に従って、コンテナー レジストリを作成します。

重要

Azure コンテナー レジストリを作成するときは必ず、 [管理者ユーザー] オプションを [有効] に設定してください。 Azure portal のレジストリ ページの [アクセス キー] セクションから設定することもできます。 App Service にアクセスするためには、この設定が必要となります。

サインイン

  1. Visual Studio Code を起動します。

  2. アクティビティ バー[Azure] ロゴを選択し、 [APP SERVICE] エクスプローラーに移動して [Azure にサインイン] を選択し、画面の指示に従います。

    Azure にサインイン

  3. 下部のステータス バーで、Azure アカウントのメール アドレスが表示されていることを確認します。 [APP SERVICE] エクスプローラーに、サブスクリプションが表示されます。

  4. アクティビティ バーで、 [Docker] ロゴを選択します。 [レジストリ] エクスプローラーで、作成したコンテナー レジストリが表示されていることを確認します。

    [Azure] が展開されている [レジストリ] の値を示すスクリーンショット。

前提条件を確認する

Docker がインストールされ、実行されていることを確認します。 次のコマンドは、Docker が実行されている場合に、そのバージョンを表示するものです。

docker --version

イメージを作成およびビルドする

  1. Visual Studio Code で空のフォルダーを開き、Dockerfile という名前のファイルを追加します。 Dockerfile で、目的の言語フレームワークに基づいてコンテンツを貼り付けます。
FROM mcr.microsoft.com/appsvc/dotnetcore:lts

ENV PORT 8080
EXPOSE 8080

ENV ASPNETCORE_URLS "http://*:${PORT}"

ENTRYPOINT ["dotnet", "/defaulthome/hostingstart/hostingstart.dll"]

この Dockerfile では、親イメージは App Service の組み込み .NET コンテナーの 1 つです。 そのソース ファイルは、Azure-App-Service/ImageBuilder GitHub リポジトリの GenerateDockerFiles/dotnetcore にあります。 その Dockerfile では、単純な .NET アプリが /defaulthome/hostingstart にコピーされます。 Dockerfile により、そのアプリが起動されます。

  1. コマンド パレットを開き、「Docker Images: Build Image」と入力します。 「Enter」と入力して、コマンドを実行します。

  2. イメージ タグ ボックスで、目的のタグを <acr-name>.azurecr.io/<image-name>/<tag> の形式で指定します。ここで、<acr-name> は、作成したコンテナー レジストリの名前です。 Enter キーを押します。

  3. イメージのビルドが終了したら、 [イメージ] エクスプローラーの上部にある [更新] をクリックして、イメージが正常にビルドされていることを確認します。

    タグ付きのビルド イメージを示すスクリーンショット。

コンテナー レジストリにデプロイする

  1. アクティビティ バーで、 [Docker] アイコンをクリックします。 [イメージ] エクスプローラーで、先ほどビルドしたイメージを見つけます。

  2. イメージを展開し、目的のタグを右クリックして、 [プッシュ] をクリックします。

  3. イメージ タグの先頭が <acr-name>.azurecr.io であることを確認し、Enter キーを押します。

  4. Visual Studio Code でコンテナー レジストリへのイメージのプッシュが完了したら、 [レジストリ] エクスプローラーの上部にある [更新] をクリックして、イメージが正常にプッシュされたことを確認します。

    Azure コンテナー レジストリにデプロイされたイメージを示すスクリーンショット。

App Service に配置する

  1. [レジストリ] エクスプローラーでイメージを展開し、タグを右クリックして、 [Deploy image to Azure App Service](Azure App Service にイメージをデプロイする) をクリックします。
  2. プロンプトに従って、サブスクリプション、グローバルに一意なアプリ名、リソース グループ、App Service プランを選択します。 価格レベルには [B1 Basic] を選択し、現在地に近いリージョンを選択します。

デプロイ後は、http://<app-name>.azurewebsites.net でアプリにアクセスできます。

リソース グループ は、Azure で利用するすべてのアプリケーションのリソースをまとめた名前付きのコレクションです。 たとえば、Web サイトやデータベース、Azure 関数への参照をリソース グループに含めることができます。

Web サイトをホストするために使用される物理リソースは、App Service プラン によって定義されます。 このクイックスタートでは、Linux インフラストラクチャ上の Basic ホスティング プランを使用します。つまりサイトは Linux マシン上で、他の Web サイトと一緒にホストされます。 Basic プランから開始すれば、マシン上で自分のサイトだけが実行されるように、Azure portal を使用してスケールアップすることができます。 価格については、「App Service の価格」をご覧ください。

Web サイトを閲覧する

[出力] パネルに、デプロイ操作の状態が表示されます。 操作が完了したら、ポップアップ通知の [サイトを開く] をクリックして、サイトをブラウザーで開きます。

次のステップ

おめでとうございます。このクイックスタートを正常に完了できました。

App Service アプリでは、起動のたびにコンテナー レジストリからプルされます。 イメージをリビルドする場合は、コンテナー レジストリにプッシュするだけで済み、アプリの再起動時に更新されたイメージが取得されます。 更新されたイメージをすぐにプルするようにアプリに指示するには、アプリを再起動します。

その他の Azure 拡張機能は次のとおりです。