公式の .NET Docker イメージ

ヒント

このコンテンツは eBook の「コンテナー化された .NET アプリケーションの .NET マイクロサービス アーキテクチャ」からの抜粋です。.NET Docs で閲覧できるほか、PDF として無料ダウンロードすると、オンラインで閲覧できます。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

公式の .NET Docker イメージは Microsoft により作成および最適化された Docker イメージです。 Microsoft アーティファクト レジストリで一般公開されています。 カタログを検索して、すべての .NET イメージ リポジトリを見つけることができます。たとえば .NET SDK リポジトリなどです。

各リポジトリには、.NET のバージョンに応じて、また OS (Linux Debian、Alpine Linux、Windows Nano Server、Windows Server Core など) とそのバージョンに応じて、複数のイメージを含めることができます。 イメージ リポジトリではさまざまなタグを利用できるため、特定のフレームワーク バージョンだけでなく、OS (Linux ディストリビューションまたは Windows のバージョン) も選択できます。

開発と運用における .NET および Docker イメージの最適化

Microsoft では開発者向けの Docker イメージをビルドするにあたり、次の主な 2 つのシナリオに重点を置きました。

  • .NET アプリの "開発" およびビルドに使用されるイメージ。

  • .NET アプリの "実行" に使用されるコマンド。

なぜ複数のイメージですか。 コンテナー化されたアプリケーションを開発、ビルド、実行する場合、通常は優先順位がそれぞれ異なります。 このような個々のタスク向けにさまざまなイメージを提供することによって、Microsoft は、アプリを開発、ビルド、および展開する個々のプロセスの最適化を支援しています。

開発中およびビルド中

開発中に重要な点は、変更を繰り返し処理する速さと、変更をデバッグする機能です。 コードを変更し、それをすばやく確認する機能に比べて、イメージのサイズはそれほど重要ではありません。 ツールと "ビルドエージェント コンテナー" の中には、開発とビルド プロセス時に .NET の開発イメージ (mcr.microsoft.com/dotnet/sdk:8.0) を使うものがあります。 Docker コンテナー内でビルドを行う場合は、アプリをコンパイルするために必要な要素が重要となります。 これには、コンパイラとその他の .NET 依存関係が含まれます。

この種のビルド イメージが重要な理由は何でしょうか。 このイメージが実稼働環境にデプロイされることはありません。 それは、実稼働イメージに配置するコンテンツをビルドする場合に使用するイメージです。 このイメージは、継続的インテグレーション (CI) 環境、または Docker マルチステージ ビルド使用時のビルド環境で使用されます。

実稼働環境

実稼働環境で重要な点は、実稼働 .NET イメージに基づいてコンテナーの展開および運用開始をいかに速く行えるかということです。 したがって、mcr.microsoft.com/dotnet/aspnet:8.0 に基づくランタイムのみのイメージは、ネットワーク経由で Docker レジストリから Docker ホストまで迅速に送信できるように小さくなっています。 コンテンツは実行できる状態であるため、コンテナーの開始から結果の処理までを最速で行うことができます。 Docker モデルでは、ビルド コンテナーを使うときに dotnet build または dotnet publish を実行する場合のように C# コードからコンパイルを行う必要はありません。

この最適化されたイメージでは、アプリケーションを実行するために必要なバイナリとその他のコンテンツのみが配置されます。 たとえば、dotnet publish で作成されたコンテンツには、コンパイルされた .NET バイナリ、イメージ、.js、および .css ファイルのみが含まれます。 今後は、事前 JIT 型 (実行時に行われる IL からネイティブへのコンパイル) パッケージを含むイメージも表示される予定です。

.NET および ASP.NET Core イメージには複数のバージョンがありますが、これらはすべてで、基本レイヤーなどの 1 つまたは複数のレイヤーが共有されます。 そのため、イメージの格納に必要なディスク領域は小さくて済みます。カスタム イメージとその基本イメージ間のデルタのみで構成されます。 結果として、レジストリからイメージを迅速にプルすることができます。

Microsoft アーティファクト レジストリで .NET イメージ リポジトリを探索すると、タグで分類またはマークされた複数のイメージ バージョンが見つかります。 これらのタグは、次の示すように、必要とするバージョンに応じて使用するものを特定するのに役立ちます。

Image Comments
mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core、ランタイムのみ、ASP.NET Core の最適化、Linux および Windows (マルチアーキテクチャ)
mcr.microsoft.com/dotnet/sdk:8.0 .NET 8、SDK 含む、Linux および Windows (マルチアーキテクチャ)

利用可能なすべての Docker イメージは dotnet-docker にあり、夜間ビルド mcr.microsoft.com/dotnet/nightly/* を使用して最新のプレビューリリースを参照することもできます