鉴于 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 框架。
图 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) |