使用 .NET 容器时定位的操作系统

小窍门

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可以在 .NET Docs 上获取,也可以下载免费的 PDF 以供离线阅读。

适用于容器化 .NET 应用程序的 .NET 微服务体系结构电子书封面缩略图。

鉴于 Docker 支持的作系统多样性以及 .NET Framework 和 .NET 8 之间的差异,应根据所使用的框架面向特定的 OS 和特定版本。

对于 Windows,可以使用 Windows Server Core 或 Windows Nano Server。 这些 Windows 版本提供不同的功能特性(例如,Windows Server Core 中的 IIS 和 Nano Server 中的自托管 Web 服务器 Kestrel),这些可能是 .NET Framework 或 .NET 8 各自所需的。

对于 Linux,官方 .NET Docker 映像(比如 Debian)中多个发行版可用且受支持。

在图 3-1 中,可以看到可能的 OS 版本,具体取决于使用的 .NET 框架。

显示要与哪些 .NET 容器一起使用的操作系统的关系图。

图 3-1. 根据 .NET framework 确定要面向的操作系统

部署旧版 .NET Framework 应用程序时,必须选用 Windows Server Core 作为目标环境,该环境与旧应用和 IIS 兼容,但它的镜像较大。 部署 .NET 8 应用程序时,可以将已经过云优化、使用 Kestrel、规模更小且启动速度更快的 Windows Nano Server 作为目标。 还可以面向 Linux,支持 Debian、Alpine 和其他操作系统。

如果想要使用其他 Linux 发行版,或者需要具有Microsoft未提供版本的映像,还可以创建自己的 Docker 映像。 例如,您可以创建一个映像,其中 ASP.NET Core 在传统的 .NET Framework 和 Windows Server Core 上运行,这在 Docker 中是不太常见的场景。

将映像名称添加到 Dockerfile 文件时,可以根据所使用的标记选择作系统和版本,如以下示例所示:

图片 注释
mcr.microsoft.com/dotnet/runtime:8.0 .NET 8 多体系结构:支持 Linux 和 Windows Nano Server,具体取决于 Docker 主机。
mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core 8.0 多体系结构:支持 Linux 和 Windows Nano Server,具体取决于 Docker 主机。
ASP.NET Core 的 aspnetcore 映像具有多个优化。
mcr.microsoft.com/dotnet/aspnet:8.0-bullseye-slim .NET 8 运行时-仅在 Linux Debian 发行版
mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 .NET 8 运行时-仅在 Windows Nano Server 上(Windows Server 版本 1809)