.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 映像类型生成的。 复合映像是 核心 CLR 的最小 aspnet 产品。

适用于全球化的映像

需要全球化的容器化应用会增大映像大小,因为它们需要全球化依赖项。 Ubuntu 和 Debian 映像已安装 ICU 和 tzdata。

tzdata 依赖项已添加到以下映像:

  • runtime-deps:8.0-jammy
  • runtime-deps:8.0-bookworm-slim

此全球化策略由 runtimeaspnet 和具有相同标记的 sdk 映像使用。

重要

将 tzdata 添加到 Debian bookworm 映像没有实际效果,除非对 tzdata 进行某种更新(尚未包含在 Debian 中),更新后,.NET 映像将包含较新的 tzdata。

某些包仍然是可选的,例如 Kerberos、LDAP 和 msquic。 这些包仅在利基方案中是必需的。

基于方案的映像

runtime-deps 映像具有很高的价值,特别是因为它们包含标准用户和端口定义。 可以在自包含和本机 AOT 方案中方便地使用它们。 但是,仅提供 runtimesdk 映像所需的 runtime-deps 映像并不足以启用所有可想象到的方案或生成最佳映像。

runtime-deps 还需要扩展到本机 AOT、*-distroless*-chiseled 映像类型。 对于每个 OS,提供了三个映像变体(都在 runtime-deps 中提供)。 请考虑使用 *-chiseled 映像的以下示例:

  • 8.0-jammy-chiseled:核心 CLR 的映像,无 tzdata 或 ICU。
  • 8.0-jammy-chiseled-aot:本机 AOT 的映像,无 tzdata、ICU 或 stdc++。
  • 8.0-jammy-chiseled-extra:核心 CLR 和本机 AOT 的映像,包括 tzdata、ICU 和 stdc++。

在方案方面:

8.0-jammy-chiseled 映像是相同标记的 runtimeaspnet 映像的基础。 默认情况下,本机 AOT 应用可以使用 8.0-jammy-chiseled-aot 映像,因为它已根据大小进行优化。 需要全球化功能的本机 AOT 应用和核心 CLR 自包含/单文件应用可以使用 8.0-jammy-chiseled-extra

Alpine 和 Mariner 映像使用相同的方案。

注意

Debian 和 Ubuntu(非 chiseled)runtime-deps 映像没有多个变体。

本机 AOT 容器映像

本机 AOT 映像将发布到 sdk 存储库,标记有后缀 -aot。 这些映像支持生成本机 AOT 应用。 它们是为具有匹配 runtime-deps:*-aot 映像的发行版创建的。 这些映像很大,大小通常是常规 SDK 映像的两倍。

AOT 映像是为以下产品发布的:

  • Alpine
  • Mariner
  • Ubuntu

有关详细信息,请参阅本机 AOT 部署

Docker Hub 存储库

适用于 .NET 的所有官方 Microsoft 映像都发布到 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
运行时 mcr.microsoft.com/dotnet/runtime
示例 mcr.microsoft.com/dotnet/samples
sdk mcr.microsoft.com/dotnet/sdk

.NET nightly 映像存储库:

映像存储库 映像
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 映像存储库:

映像存储库 Image
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

另请参阅