Condividi tramite


Introduzione a .NET e Docker

I contenitori sono uno dei modi più diffusi per distribuire e ospitare applicazioni cloud, con strumenti come Docker, Kubernetese Podman. Molti sviluppatori scelgono contenitori perché è semplice creare un pacchetto di un'app con le relative dipendenze e ottenere che l'app venga eseguita in modo affidabile in qualsiasi host contenitore. È disponibile un vasto supporto per l'uso di .NET con contenitoriper .

Docker offre un'ottima panoramica dei contenitori. Docker Desktop: Community Edition è un ottimo strumento da usare per l'uso di contenitori nel computer desktop per sviluppatori.

Immagini .NET

Le immagini dei contenitori .NET ufficiali vengono pubblicate nel registro artefatti Microsoft e sono individuabili nell'hub Docker . Sono disponibili immagini di runtime per la produzione e immagini SDK per la compilazione del codice, per Linux (Alpine, Debian, Ubuntu, Mariner) e Windows. Per ulteriori informazioni, vedere immagini del container .NET.

Le immagini .NET vengono aggiornate regolarmente ogni volta che viene pubblicata una nuova patch .NET o quando viene aggiornata un'immagine di base del sistema operativo.

Le immagini contenitore scolpite sono immagini contenitore di Ubuntu con un set minimo di componenti richiesti dal runtime .NET. Queste immagini sono inferiori a circa 100 MB rispetto alle normali immagini Ubuntu e hanno meno CVE poiché hanno meno componenti. In particolare, non contengono una shell o un gestore di pacchetti, il che migliora significativamente il profilo di sicurezza. Includono anche un utente non root e sono configurati con quell'utente abilitato.

Compilazione di immagini del contenitore

È possibile compilare un'immagine del contenitore con un Dockerfile oppure fare affidamento su .NET SDK per produrre un'immagine. Per esempi sulla creazione di immagini, vedere dotnet/dotnet-docker e dotnet/sdk-container-builds.

L'esempio seguente illustra la compilazione e l'esecuzione di un'immagine del contenitore in pochi passaggi rapidi (supportato con .NET 8 e .NET 7.0.300).

$ 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.

Porte

La mappatura delle porte è una parte fondamentale dell'uso dei contenitori. Le porte devono essere pubblicate all'esterno del contenitore per rispondere alle richieste Web esterne. Le immagini del contenitore di ASP.NET Core sono state modificate in .NET 8 per ascoltare sulla porta 8080, per impostazione predefinita. .NET 6 e 7 ascoltano 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.

È possibile usare le variabili di ambiente ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTSe ASPNETCORE_URLS per configurare questo comportamento.

Gli utenti

A partire da .NET 8, tutte le immagini includono un utente non radice denominato app. Per impostazione predefinita, le immagini scalpellate sono configurate con questo utente abilitato. La funzionalità di pubblicazione dell'app come contenitore .NET (illustrata nella sezione Creazione di immagini del container) 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, è possibile usare l'istruzione USER per impostare l'utente su root.

Rimanere informati

Le notizie relative ai contenitori vengono pubblicate alle discussioni dotnet/dotnet-docker e alla categoria "contenitori" del blog .NET.

Servizi di Azure

Vari servizi di Azure supportano i contenitori. Si crea un'immagine Docker per l'applicazione e la si distribuisce in uno dei servizi seguenti:

  • Servizio Azure Kubernetes (AKS)
    Ridimensionare e orchestrare i contenitori Windows & Linux usando Kubernetes.

  • Azure App Service
    Distribuire applicazioni web o API usando container in un ambiente PaaS.

  • Azure Container Apps
    Esegui i carichi di lavoro su container senza gestire server, orchestrazione o infrastruttura e sfrutta il supporto nativo per Dapr e KEDA per l'osservabilità e il ridimensionamento a zero.

  • istanze di Azure Container
    Creare singoli contenitori nel cloud senza servizi di gestione di livello superiore.

  • Azure Batch
    Eseguire processi di calcolo ripetitivi usando contenitori.

  • Azure Service Fabric
    Trasferire in modalità lift,shift e modernizzare le applicazioni .NET in microservizi usando i contenitori Windows & Linux.

  • Registro Azure Container
    Archiviare e gestire le immagini dei contenitori in tutti i tipi di distribuzioni di Azure.

Passaggi successivi