I contenitori sono uno dei modi più diffusi per distribuire e ospitare applicazioni cloud, con strumenti come Docker, Kubernetes e Podman. Molti sviluppatori scelgono i contenitori perché è semplice creare un pacchetto di un'app con le relative dipendenze e fare in modo che l'app venga eseguita in modo affidabile in qualsiasi host contenitore. È disponibile un ampio supporto per l'uso di .NET con contenitori.
Le immagini .NET vengono aggiornate regolarmente ogni volta in cui viene pubblicata una nuova patch .NET o quando viene aggiornata un'immagine di base del sistema operativo.
Le immagini del contenitore create in Chisel sono immagini del contenitore Ubuntu con un set minimo di componenti richiesti dal runtime .NET. Queste immagini sono inferiori di circa 100 MB rispetto alle normali immagini Ubuntu e hanno meno CVE perché presentano meno componenti. In particolare, non contengono una shell o una gestione pacchetti, che migliora significativamente il profilo di sicurezza. Includono anche un utente non radice e sono configurate con tale utente abilitato.
L'esempio seguente illustra la compilazione e l'esecuzione di un'immagine del contenitore in pochi rapidi passaggi (supportate con .NET 8 e .NET 7.0.300).
Bash
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init è una nuova opzione per gli sviluppatori che vogliono usare Dockerfile.
Porti
Il mapping delle porte è una parte fondamentale dell'uso dei contenitori. Le porte devono essere pubblicate all'esterno del contenitore per rispondere alle richieste Web esterne. Immagini del contenitore ASP.NET Core cambiate in .NET 8 per l'ascolto sulla porta 8080, per impostazione predefinita. Ascolto di .NET 6 e 7 sulla porta 80.
Nell'esempio precedente con docker run, la porta host 8000 viene mappata alla porta del contenitore 8080. Kubernetes funziona in modo simile.
Le variabili di ambiente ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS e ASPNETCORE_URLS possono essere usate per configurare questo comportamento.
Utenti
A partire da .NET 8, tutte le immagini includono un utente non radice denominato app. Per impostazione predefinita, le immagini create in Chisel sono configurate con questo utente abilitato. L'app di pubblicazione come funzionalità contenitore .NET (illustrata nella sezione Compilazione di immagini del contenitore) configura anche le immagini con questo utente abilitato per impostazione predefinita. In tutti gli altri scenari, l'utente app può essere impostato manualmente, ad esempio con l'istruzione USERDockerfile. Se un'immagine è stata configurata con app e i comandi devono essere eseguiti come root, l'istruzione USER può essere usata per impostare l'utente su root.
Diversi servizi di Azure consentono l'uso di contenitori. È possibile creare un'immagine Docker per un'applicazione e distribuirla in uno dei servizi seguenti:
Servizio app di Azure
Permette di distribuire app Web o API usando contenitori in un ambiente platform as a service.
App contenitore di Azure
Consente di eseguire i carichi di lavoro dei contenitori senza gestire server, orchestrazione o infrastruttura e sfruttare il supporto nativo per Dapr e KEDA per l'osservabilità e il ridimensionamento a zero.
Istanze di Azure Container
È possibile creare singoli contenitori nel cloud senza servizi di gestione generali.
Azure Batch
Consente di eseguire processi di calcolo ripetitivi usando contenitori.
Azure Service Fabric
Consente di trasferire in modalità lift-and-shift e modernizzare le applicazioni .NET trasformandole in microservizi tramite contenitori Windows e Linux.
Registro Azure Container
Consente di archiviare e gestire immagini dei contenitori per tutti i tipi di distribuzioni di Azure.
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Progettare soluzioni end-to-end in Microsoft Azure per creare Funzioni di Azure, implementare e gestire app Web, sviluppare soluzioni che usano Archiviazione di Azure e altro ancora.
Informazioni su come usare le immagini Docker principali pubblicate ASP.NET dal Registro di sistema Docker. Eseguire il pull e creare immagini personalizzate.