Come scegliere il sistema operativo per i contenitori .NET

Suggerimento

Questo contenuto è un estratto dell'eBook "Microservizi .NET: Architettura per le applicazioni .NET incluse in contenitori", disponibile in .NET Docs o come PDF scaricabile gratuitamente e da poter leggere offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Considerata la varietà di sistemi operativi supportati da Docker e le differenze tra .NET Framework e .NET 8, è necessario scegliere un sistema operativo e le versioni specifiche a seconda del framework in uso.

Per Windows, è possibile usare Windows Server Core o Windows Nano Server. Queste versioni di Windows offrono caratteristiche diverse (IIS in Windows Server Core rispetto a un server Web self-hosted come Kestrel in Windows Nano Server) che potrebbero essere richieste rispettivamente da .NET Framework o .NET 8.

Per Linux, sono disponibili più distribuzioni supportate in immagini Docker. NET ufficiali, ad esempio Debian.

Nella figura 3-1 sono mostrate le versioni possibili del sistema operativo a seconda del framework .NET usato.

Diagram showing what OS to use with which .NET containers.

Figura 3-1. Sistemi operativi possibili a seconda delle versioni del framework .NET

Quando si distribuiscono applicazioni .NET Framework legacy, è necessario usare come destinazione Windows Server Core, che è compatibile con le app legacy e IIS, ma ha un'immagine di dimensioni maggiori. Quando si distribuiscono applicazioni .NET 8, è possibile usare come destinazione Windows Nano Server, che è ottimizzato per il cloud, usa Kestrel, è di dimensioni inferiori e viene avviato più rapidamente. È anche possibile usare come destinazione Linux, che supporta Debian, Alpine e altri sistemi.

È anche possibile creare un'immagine Docker personalizzata, se si vuole usare una distribuzione Linux diversa o un'immagine con versioni non fornite da Microsoft. Si può ad esempio creare un'immagine con ASP.NET Core in esecuzione in .NET Framework tradizionale e in Windows Server Core, che non rappresenta uno scenario così comune per Docker.

Quando si aggiunge il nome dell'immagine al file Dockerfile, è possibile selezionare il sistema operativo e la versione a seconda del tag usato, come negli esempi seguenti:

Image Commenti
mcr.microsoft.com/dotnet/runtime:8.0 Multiarchitettura .NET 8: supporta Linux e Windows Nano Server a seconda dell'host Docker.
mcr.microsoft.com/dotnet/aspnet:8.0 Multiarchitettura ASP .NET Core 8.0: supporta Linux e Windows Nano Server a seconda dell'host Docker.
L'immagine aspnetcore ha poche ottimizzazioni per ASP.NET Core.
mcr.microsoft.com/dotnet/aspnet:8.0-bullseye-slim Solo runtine .NET 8 in distribuzione Linux Debian
mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 Solo runtime .NET 8 in Windows Nano Server (Windows Server versione 1809)