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.
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.
Un'altra ottima opzione sono i contenitori di sviluppo. Questi contenitori sono ambienti di sviluppo predefiniti pronti per l'uso. Non è necessario preoccuparsi delle dipendenze e delle configurazioni. Sono anche facili da personalizzare per includere ulteriori strumenti o dipendenze. I contenitori di sviluppo offrono una configurazione coerente, riproducibile e facile da condividere con il team. I contenitori di sviluppo sono conformi alla Specifica dei contenitori di sviluppo e sono supportati da molti strumenti di sviluppo diffusi, tra cui Visual Studio Code e GitHub Codespaces. I contenitori di sviluppo .NET si basano sull'immagine .NET SDK e includono .NET SDK, runtime e altri strumenti necessari per lo sviluppo di applicazioni .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/*