次の方法で共有


.NET コンテナー イメージ

.NET には、異なるシナリオを想定したさまざまなコンテナー イメージが用意されています。 この記事では、さまざまな種類のイメージとその使用方法について説明します。 公式イメージの詳細については、Docker Hub: Microsoft .NET リポジトリを参照してください。

タグ付け方式

.NET 8 以降では、コンテナー イメージの区別の方法がより実用的になります。 イメージの区別には、次の特性を用います。

  • アプリのターゲット フレームワーク モニカー (TFM)。
  • OS、バージョン、アーキテクチャ。
  • イメージの種類 (runtimeaspnetsdk など)。
  • イメージのバリアント (*-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

このグローバリゼーション戦術は同じタグを用いて runtimeaspnetsdk のイメージで利用されています。

重要

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 イメージは、同じタグを持つ runtimeaspnet のイメージのベースです。 既定では、ネイティブ 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 のイメージ (安定版) リポジトリ:

イメージ リポジトリ イメージ
aspnet mcr.microsoft.com/dotnet/aspnet
monitor mcr.microsoft.com/dotnet/monitor
monitor-base mcr.microsoft.com/dotnet/monitor/base
runtime-deps mcr.microsoft.com/dotnet/runtime-deps
runtime mcr.microsoft.com/dotnet/runtime
サンプル mcr.microsoft.com/dotnet/samples
sdk mcr.microsoft.com/dotnet/sdk

.NET のイメージ (ナイトリー版) リポジトリ:

イメージ リポジトリ イメージ
nightly mcr.microsoft.com/dotnet/nightly
nightly-aspnet mcr.microsoft.com/dotnet/nightly/aspnet
nightly-monitor-base mcr.microsoft.com/dotnet/nightly/monitor/base
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

.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

関連項目