次の方法で共有


.NET と Docker の概要

コンテナーは、DockerKubernetesPodmanなどのツールを使用して、クラウド アプリケーションをデプロイおよびホストするための最も一般的な方法の 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_PORTSASPNETCORE_HTTPS_PORTS、および ASPNETCORE_URLS 環境変数を使用できます。

ユーザー

.NET 8 以降では、すべてのイメージに appという非ルート ユーザーが含まれています。 既定では、Chiseled イメージは、このユーザーを有効にして構成されます。 .NET コンテナーとしての発行アプリ機能 (コンテナー イメージのビルド セクションで示します) では、このユーザーが既定で有効になっているイメージも構成されます。 他のすべてのシナリオでは、app ユーザーを手動で設定できます 。たとえば、USERDockerfile 命令を使用します。 イメージが 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
    サーバー、オーケストレーション、またはインフラストラクチャを管理せずにコンテナー ワークロードを実行し、監視とスケーリングをゼロにするために、DaprKEDA のネイティブ サポートを活用します。

  • Azure Container Instances
    上位レベルの管理サービスを使用せずに、クラウド内に個々のコンテナーを作成します。

  • Azure Batch
    コンテナーを使用して反復的なコンピューティング ジョブを実行します。

  • Azure Service Fabric
    Windows & Linux コンテナーを使用して、.NET アプリケーションをマイクロサービスにリフト、シフト、最新化します。

  • Azure Container Registry
    すべての種類の Azure デプロイでコンテナー イメージを格納および管理します。

次の手順