.NET コンテナー イメージ
.NET には、異なるシナリオを想定したさまざまなコンテナー イメージが用意されています。 この記事では、さまざまな種類のイメージとその使用方法について説明します。 公式イメージの詳細については、Docker Hub: Microsoft .NET リポジトリを参照してください。
タグ付け方式
.NET 8 以降では、コンテナー イメージの区別の方法がより実用的になります。 イメージの区別には、次の特性を用います。
- アプリのターゲット フレームワーク モニカー (TFM)。
- OS、バージョン、アーキテクチャ。
- イメージの種類 (
runtime
、aspnet
、sdk
など)。 - イメージのバリアント (
*-distroless
、*-chiseled
など)。 - イメージの機能 (
*-aot
,*-extra
など)。
イメージ サイズの最適化
次のイメージは、イメージのサイズを可能な限り最小化することに注力しています。
- Alpine
- Mariner distroless
- Ubuntu chiseled
これらのイメージには、ICU や tzdata などのグローバリゼーションの依存関係がないため、軽量化されています。 これらのイメージは、グローバリゼーション インバリアント モード用に構成されているアプリでのみ機能します。 グローバリゼーション インバリアント用にアプリを構成するには、プロジェクト ファイルに次のプロパティを追加します。
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
ヒント
SDK イメージでは、*-distroless
型や *-chiseled
型のイメージは生成されません。 複合イメージは、Core CLR 向けの最小の aspnet
オファリングです。
グローバリゼーションに適したイメージ
グローバリゼーションを必要とするコンテナー化されたアプリは、グローバリゼーションの依存関係が必要なため、イメージのサイズが肥大化します。 Ubuntu と Debian のイメージには、ICU と tzdata が既にインストールされています。
tzdata の依存関係は次のイメージに追加されています。
runtime-deps:8.0-jammy
runtime-deps:8.0-bookworm-slim
このグローバリゼーション戦術は同じタグを用いて runtime
、aspnet
、sdk
のイメージで利用されています。
重要
Debian bookworm のイメージに tzdata を追加しても、tzdata (Debian にまだ含まれていない) の更新がない限り、実際的な効果はありません。その時点で、.NET イメージには最新の tzdata が含まれています。
Kerberos、LDAP、msquic など、一部のパッケージは引き続き省略可能となっています。 これらのパッケージは、特殊なシナリオでのみ必要となります。
シナリオベースのイメージ
runtime-deps のイメージには、特に標準ユーザーとポートの定義が含まれていることから、重要な価値があります。 これは、自己完結型およびネイティブ AOT のシナリオで使用すると便利です。 ただし、ランタイムと SDK のイメージに必要な runtime-deps
イメージのみを提供するだけでは、考えられるすべてのシナリオの実現や、最適なイメージの生成には不十分です。
runtime-deps
は、ネイティブ AOT、*-distroless
、*-chiseled
のイメージ タイプにおいても必要です。 OS ごとに、3 つのイメージ バリアント (すべて runtime-deps
にある) が提供されます。 *-chiseled
イメージを使用する次の例を考えてみます。
8.0-jammy-chiseled
: Core CLR 用のイメージ (tzdata または ICU を含まない)。8.0-jammy-chiseled-aot
: ネイティブ AOT 用のイメージ (tzdata、ICU、stdc++ を含まない)。8.0-jammy-chiseled-extra
: Core CLR とネイティブ AOT の両方を対象とするイメージ (tzdata、ICU、stdc++ を含む)。
シナリオの観点からは次のことが言えます。
8.0-jammy-chiseled
イメージは、同じタグを持つ runtime
と aspnet
のイメージのベースです。 既定では、ネイティブ AOT アプリはサイズに最適化されている 8.0-jammy-chiseled-aot
イメージを使用できます。 グローバリゼーション機能を必要とするネイティブ AOT アプリと Core CLR 自己完結型/単一ファイル アプリは、8.0-jammy-chiseled-extra
を使用できます。
Alpine と Mariner のイメージでも、同じスキームが使用されます。
Note
Debian と Ubuntu (Chiseled Ubuntu 以外) の runtime-deps
イメージには複数のバリアントはありません。
ネイティブ AOT のコンテナー イメージ
ネイティブ AOT イメージは SDK リポジトリに発行され、-aot
サフィックスでタグ付けされています。 これらのイメージを使用して、ネイティブ AOT アプリを構築できます。 このアプリは、runtime-deps:*-aot
イメージと合致するディストリビューション向けに作成されます。 これらのイメージは大きく、通常の SDK イメージ サイズの 2 倍となるのが一般的です。
AOT イメージは次のディストリビューション向けに発行されています。
- Alpine
- Mariner
- Ubuntu
詳細については、「ネイティブ AOT のデプロイ」を参照してください
Docker Hub リポジトリ
Microsoft の.NET 向け公式イメージはすべて、microsoft-dotnet Docker Hub 組織に発行されます。 次のリポジトリをご検討ください。
.NET のイメージ (安定版) リポジトリ:
イメージ リポジトリ | Image |
---|---|
sdk | mcr.microsoft.com/dotnet/sdk |
aspnet | mcr.microsoft.com/dotnet/aspnet |
runtime | mcr.microsoft.com/dotnet/runtime |
runtime-deps | mcr.microsoft.com/dotnet/runtime-deps |
monitor | mcr.microsoft.com/dotnet/monitor |
aspire-dashboard | mcr.microsoft.com/dotnet/aspire-dashboard |
サンプル | mcr.microsoft.com/dotnet/samples |
.NET のイメージ (ナイトリー版) リポジトリ:
イメージ リポジトリ | Image |
---|---|
nightly-aspnet | mcr.microsoft.com/dotnet/nightly/aspnet |
nightly-monitor | mcr.microsoft.com/dotnet/nightly/monitor |
nightly-runtime-deps | mcr.microsoft.com/dotnet/nightly/runtime-deps |
nightly-runtime | mcr.microsoft.com/dotnet/nightly/runtime |
nightly-sdk | mcr.microsoft.com/dotnet/nightly/sdk |
nightly-aspire-dashboard | mcr.microsoft.com/dotnet/nightly/aspire-dashboard |
.NET Framework のイメージ リポジトリ:
イメージ リポジトリ | イメージ |
---|---|
framework | mcr.microsoft.com/dotnet/framework |
framework-aspnet | mcr.microsoft.com/dotnet/framework/aspnet |
framework-runtime | mcr.microsoft.com/dotnet/framework/runtime |
framework-samples | mcr.microsoft.com/dotnet/framework/samples |
framework-sdk | mcr.microsoft.com/dotnet/framework/sdk |
framework-wcf | mcr.microsoft.com/dotnet/framework/wcf |
関連項目
.NET