Immagini Docker .NET ufficiale

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.

Le immagini Docker .NET ufficiali sono immagini Docker create e ottimizzate da Microsoft. Sono disponibili pubblicamente in Registro artefatti Microsoft. È possibile cercare nel catalogo per trovare tutti i repository di immagini .NET, ad esempio il repository .NET SDK.

Ogni repository può contenere più immagini, a seconda delle versioni di .NET e del sistema operativo e delle relative versioni, ad esempio Linux Debian, Linux Spline, Windows Nano Server, Windows Server Core e così via. I repository di immagini offrono un'ampia gamma di tag che consentono di selezionare non solo una versione specifica del framework, ma anche di scegliere un sistema operativo (distribuzione Linux o versione di Windows).

Ottimizzazioni delle immagini .NET e Docker per lo sviluppo e la produzione

Quando si creano immagini Docker per gli sviluppatori, è opportuno concentrare l'attenzione sugli scenari principali seguenti:

  • Immagini usate per sviluppare e compilare app .NET.

  • Immagini usate per eseguire le app .NET.

Perché sono disponibili più immagini? Durante lo sviluppo, la compilazione e l'esecuzione di applicazioni in contenitori, è necessario tenere conto di diverse priorità. Fornendo immagini diverse per queste attività separate, Microsoft consente di ottimizzare i processi per lo sviluppo, la compilazione e la distribuzione di app.

Durante lo sviluppo e la compilazione

Durante lo sviluppo, ciò che conta è la velocità di iterazione delle modifiche e la possibilità di eseguire il debug delle modifiche. Le dimensioni dell'immagine non sono importanti quanto la possibilità di apportare modifiche al codice e di visualizzarle rapidamente. Durante il processo di sviluppo e compilazione, alcuni strumenti e "contenitori di agente di compilazione" usano l'immagine .NET (mcr.microsoft.com/dotnet/sdk:8.0) di sviluppo. Durante la compilazione all'interno di un contenitore Docker, gli aspetti importanti sono gli elementi necessari per compilare l'app. Tra questi, il compilatore e le eventuali altre dipendenze di .NET.

Perché questo tipo di immagine di compilazione è importante? Questa immagine non viene distribuita nell'ambiente di produzione. Si tratta piuttosto di un'immagine usata per compilare il contenuto inserito in un'immagine di produzione. Questa immagine può essere usata nell'ambiente di integrazione continua (CI, Continuous Integration) o di compilazione quando si eseguono compilazioni Docker in più fasi.

In produzione

Ciò che conta nella produzione è quanto velocemente è possibile distribuire e avviare i contenitori basati su un'immagine .NET di produzione. Di conseguenza, l'immagine solo runtime basata su mcr.microsoft.com/dotnet/aspnet:8.0 è di piccole dimensioni, in modo da poter attraversare velocemente la rete dal registro Docker agli host Docker. Il contenuto è pronto per l'esecuzione, rendendo minimo l'intervallo tra l'avvio del contenitore e l'elaborazione dei risultati. Nel modello Docker, non è necessario eseguire la compilazione dal codice C#, come quando si eseguono i comandi dotnet build o dotnet publish con il contenitore di compilazione.

In questa immagine ottimizzata, si inseriscono solo i file binari e altri contenuti necessari per eseguire l'applicazione. Ad esempio, il contenuto creato da dotnet publish contiene solo i file binari, le immagini e file JS e CSS compilati. Nel corso del tempo, si vedranno immagini contenenti pacchetti pre-JIT (la compilazione dal linguaggio intermedio al codice nativo che avviene in fase di esecuzione).

Anche se sono presenti più versioni delle immagini .NET e ASP.NET Core, tutte queste versioni condividono uno o più livelli, incluso il livello di base. La quantità di spazio su disco necessaria per archiviare un'immagine è quindi ridotta ed è costituita solo dal valore differenziale tra l'immagine personalizzata e l'immagine di base. Ne consegue quindi che il pull dell'immagine dal registro è veloce.

Durante l'esplorazione dei repository di immagini .NET nel Registro artefatti Microsoft, sono disponibili più versioni di immagini classificate o contrassegnate con tag. Questi tag consentono di decidere l'immagine da usare a seconda della versione necessaria, come quelle nella tabella seguente:

Image Commenti
mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core, con ottimizzazioni ASP.NET Core e solo runtime, in Linux e Windows (multiarchitettura)
mcr.microsoft.com/dotnet/sdk:8.0 .NET 8, con SDK inclusi, in Linux e Windows (multiarchitettura)

È possibile trovare tutte le immagini Docker disponibili in dotnet-docker e fare riferimento anche alle versioni di anteprima più recenti usando la build notturna mcr.microsoft.com/dotnet/nightly/*