導入
Web 開発者として、私たちはアプリケーションのデプロイと保守が複雑になりながら、アプリケーションに適切なホスティングを見つけていました。しかし今、私たちはクラウドプロバイダーがほとんどコストをかけずに多くのものを作ってくれる新しい時代に生きています。 .NET 開発者にとって、Web アプリケーションをホストするには Microsoft Azure が最も自然な選択肢と言えます。
Docker は、アプリケーションを実行しているプラットフォームや環境からの抽象化を可能にするもう 1 つのテクノロジーです。
この記事では、単純な ASP.NET Core Web アプリケーションを作成する方法、アプリケーションで Docker イメージを作成する方法、およびそれを Azure にデプロイする最も簡単な方法に関する詳細なガイドを提供します。最終的には、Web アプリケーションをデプロイし、世界中からアクセスできるようにする方法をよく理解できるようになります。
1. ASP.NET Core Web アプリを作成する
この記事では開発のために JetBrains Rider を使用します。ただし、必要なツールは何でも使用できます。
まず、新しいプロジェクトを作成する必要があります。これを単純な「 webapp 」と呼びましょう。
新しいプロジェクトを作成すると、次のようになります。
2. Docker イメージの作成
プロジェクトに変更を加えずに、 Dockerfile
に焦点を当てます。次の例のように変更します。
FROM mcr.microsoft.com/dotnet/aspnet:6.0 as base WORKDIR /app EXPOSE 8080 ENV ASPNETCORE_URLS http://+:8080 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build COPY . /src WORKDIR /src RUN dotnet build "webapp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "webapp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "webapp.dll"]
HTTP 経由で Docker コンテナに接続できるようにするには、 EXPOSE 8080
およびENV ASPNETCORE_URLS http://+:8080
の行に注意する必要があります。
コマンド ラインから Docker イメージをビルドします。 webapp
プロジェクト ディレクトリに移動し、次のコマンドを実行する必要があります。
DOCKER_BUILDKIT=1 docker buildx build --platform linux/amd64 --tag drmoz/webapp:latest .
Mac M1 で実行していますが、Azure デプロイメントと互換性を持たせるために--platform
パラメーターを明示的に指定する必要があります。また、別のアーキテクチャ用のイメージをビルドできるように、 DOCKER_BUILDKIT=1
パラメーターを指定し、 buildx
を使用して Docker Buildkit をアクティブにする必要があります。
Intel x86/x64 プラットフォームで実行している場合は、 --platform
パラメーターを指定してbuildx
をアクティブ化することなく、 docker build
コマンドを使用できます。
イメージに別のタグを付けることもできますが、Docker Hub を使用するので、イメージ タグdrmoz/webapp:latest
の一部としてアカウント名drmoz
を指定する必要があります。
イメージがビルドされたら、次のコマンドを実行して、そのイメージが Docker に存在するかどうかを確認できます。
docker images
それはリストにあるはずです:
REPOSITORY TAG IMAGE ID CREATED SIZE drmoz/webapp latest 0cfac748256b 37 minutes ago 216MB
Docker コンテナを実行して、新しく作成したイメージが正常に動作することを確認してみましょう。 docker run
コマンドを実行してコンテナを起動します。
docker run -p 5555:8080 drmoz/webapp:latest
-p
パラメーターを指定して、コンテナー内の8080
ポートをローカル マシンの5555
ポートにマップします。また、イメージ名を指定してコンテナを作成します。私の場合、それはdrmoz/webapp:latest
です。
これで、ブラウザーhttp://localhost:5555
に移動して、ASP.NET Core Web アプリのホーム ページを表示できるようになります。
イメージをDocker Hubにプッシュする必要があります。その前に、Docker レジストリに登録し、リポジトリを作成する必要があります。ホームページの右隅にある「リポジトリの作成」ボタンをクリックします。
Repository Name
フィールドを指定し、リポジトリの可視性をPublic
のままにします。
コマンド ラインで、Docker Hub レジストリにログインする必要があります。
docker login
その後、新しく作成したイメージをレジストリにプッシュできるようになります。
docker push drmoz/webapp:latest
リポジトリに移動すると、イメージに関する情報が表示されます。
3. Azure で Web アプリを作成する
これで、ASP.NET Core Web アプリケーションを Azure にデプロイする準備が整いました。 Azure Portal にログインし、新しいリソース グループを作成しましょう。リソース グループ名を「 webapp-rg 」と指定し、「確認と作成」ボタンをクリックします。
次の画面で、「作成」ボタンを押すだけです。
これで、Web アプリを作成できます。 「リソースの作成」ページに移動し、WebApp を見つけます。 「作成」ボタンをクリックします。
以前に作成したResource Group
を指定する必要があります。また、Web アプリの一意のName
を指定します。 Publish
フィールドで「Docker コンテナ」を選択します。後で、使用する Docker イメージを指定できるようになります。
Pricing plans
セクションで適切なオプションを選択しますが、テスト目的には無料の F1タイヤを使用することをお勧めします。 「Docker」タブに移動します。
このタブのImage Source
フィールドで [Docker Hub] を選択します。 [ Access Type
] フィールドで [パブリック] を選択し、Docker Hub にプッシュしたイメージの名前を使用してImage and tag
値を指定します。 「レビューと作成」タブに移動します。このタブで、「作成」ボタンをクリックします。
新しいリソースがデプロイされると、このリソースに移動するかどうかを尋ねられます。やるだけ。 Webアプリに関する情報が表示されます。
「参照」ボタンをクリックして、デプロイされた Web アプリケーションを開きます。すべてが正常に完了した場合は、 http://localhost:5555
に移動すると、ブラウザーで表示されたものと同様の ASP.NET Core Web アプリのホーム ページが表示されるはずです。
継続的展開を有効にする
「デプロイ センター」設定に移動して「デプロイの続行」を有効にすると、新しいイメージを Docker Hub にプッシュするたびにイメージを再デプロイできるようになります。このようにして、コードに変更を加え、新しいイメージを使用して Docker Hub にプッシュすると、Azure で数分で変更を確認できます。
Azure Web アプリのトラブルシューティング
デプロイ ログを表示して問題を特定できるようにするには、次のように「App Service ログ」の章でファイル システムへのログの保存を有効にする必要があります。
完了すると、次のように「展開センター」に移動してログを確認できます。
まとめ
この時点まで到達すると、ASP.NET Core Web アプリケーションを作成できたことになります。それを Docker イメージにパックし、Azure にデプロイします。今日、テクノロジーにより生活が楽になり、開発プロセスがスピードアップされています。アプリケーションをクラウド プロバイダーにデプロイして全世界に公開し、テストを実行して、作業の結果を確認することがいかに簡単にできるかを確認できます。
Microsoft のドキュメントを使用して、Azure クラウド プロバイダーの詳細を詳しく調べることができます。また、このテクノロジーについてより深く理解するには、Docker のドキュメントも参照してください。参考になれば幸いです。