.NET と Docker の概要
コンテナーは、Docker、Kubernetes、Podmanなどのツールを使用して、クラウド アプリケーションをデプロイおよびホストするための最も一般的な方法の 1 つです。 多くの開発者がコンテナーを選択するのは、アプリとその依存関係をパッケージ化し、そのアプリを任意のコンテナー ホストで確実に実行できるためです。 コンテナーで .NET を使用する
Docker には、コンテナーの優れた 概要 が用意されています。 Docker Desktop: Community Edition は、開発者のデスクトップ コンピューターでコンテナーを使用するために使用するのに適したツールです。
.NET イメージ
公式の .NET コンテナー イメージは、Microsoft Artifact Registry に発行され、Docker Hubで検出できます。 Linux (Alpine、Debian、Ubuntu、Mariner) と Windows 用に、運用向けの ランタイムイメージ と、コードのビルド用の SDK イメージ があります。 詳細については、.NET コンテナー イメージを参照してください。
.NET イメージは、新しい .NET パッチが発行されたとき、またはオペレーティング システムの基本イメージが更新されるたびに定期的に更新されます。
、 の Chiseled コンテナー イメージは、.NET ランタイムで必要とされる最小限のコンポーネントセットを持つ Ubuntu コンテナー イメージです。 これらのイメージは、通常の Ubuntu イメージよりも約 100 MB 小さく、コンポーネントが少ないため、CVE が少なくなります。 特に、シェルやパッケージ マネージャーが含まれていないため、セキュリティ プロファイルが大幅に向上します。 また、非ルート ユーザー
コンテナイメージを構築する
Dockerfile を使用してコンテナー イメージをビルドすることも、.NET SDK に依存してイメージを生成することもできます。 イメージの構築サンプルについては、dotnet/dotnet-docker および dotnet/sdk-container-builds を参照してください。
次の例では、いくつかの簡単な手順 (.NET 8 および .NET 7.0.300 でサポート) でコンテナー イメージをビルドして実行する方法を示します。
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init
は、Dockerfile を使用する開発者向けの新しいオプションです。
ポート
ポート マッピング は、コンテナーを使用する上で重要な部分です。 外部 Web 要求に応答するには、コンテナーの外部でポートを発行する必要があります。 ASP.NET Core コンテナー イメージ 、既定でポート 8080
をリッスンするように .NET 8 で変更されました。 .NET 6 と 7 は、ポート 80
でリッスンします。
前の docker run
の例では、ホスト ポート 8000
はコンテナー ポート 8080
にマップされています。 Kubernetes も同様の方法で動作します。
この動作を構成するには、ASPNETCORE_HTTP_PORTS
、ASPNETCORE_HTTPS_PORTS
、および ASPNETCORE_URLS
環境変数を使用できます。
ユーザー
.NET 8 以降では、すべてのイメージに app
という非ルート ユーザーが含まれています。 既定では、Chiseled イメージは、このユーザーを有効にして構成されます。 .NET コンテナーとしての発行アプリ機能 (コンテナー イメージのビルド セクションで示します) では、このユーザーが既定で有効になっているイメージも構成されます。 他のすべてのシナリオでは、app
ユーザーを手動で設定できます 。たとえば、USER
Dockerfile 命令を使用します。 イメージが app
で構成されていて、コマンドを root
として実行する必要がある場合は、USER
命令を使用してユーザーに root
を設定できます。
最新情報を入手する
コンテナー関連のニュースは、dotnet/dotnet-docker ディスカッション に投稿され、.NET ブログの "コンテナー" カテゴリに投稿されます。
Azure サービス
さまざまな Azure サービスがコンテナーをサポートしています。 アプリケーションの Docker イメージを作成し、次のいずれかのサービスにデプロイします。
Azure Kubernetes Service (AKS)
Kubernetes を使用して Windows & Linux コンテナーをスケーリングおよび調整します。Azure App Service
PaaS 環境でコンテナーを使用して Web アプリまたは API をデプロイします。Azure Container Apps
サーバー、オーケストレーション、またはインフラストラクチャを管理せずにコンテナー ワークロードを実行し、監視とスケーリングをゼロにするために、Dapr と KEDA のネイティブ サポートを活用します。Azure Container Instances
上位レベルの管理サービスを使用せずに、クラウド内に個々のコンテナーを作成します。Azure Batch
コンテナーを使用して反復的なコンピューティング ジョブを実行します。Azure Service Fabric
Windows & Linux コンテナーを使用して、.NET アプリケーションをマイクロサービスにリフト、シフト、最新化します。Azure Container Registry
すべての種類の Azure デプロイでコンテナー イメージを格納および管理します。
次の手順
.NET