Docker è un servizio di containerizzazione, utilizzato per l'esecuzione di applicazioni in ambienti isolati con tutte le dipendenze e il codice necessari per funzionare. Può eseguire tutti i tipi di applicazioni, inclusi i programmi basati su .NET che utilizzano immagini di runtime fornite da Microsoft.
Dockerizzare .NET
Microsoft fornisce immagini di base predefinite per l'esecuzione di applicazioni .NET. Non dovrai gestire l'installazione del runtime .NET o dell'SDK nel tuo contenitore Docker, poiché puoi semplicemente estendere l'immagine di base di Microsoft per la versione di .NET utilizzata dalla tua applicazione.
A meno che tu non preveda di distribuire contenitori Windows su un server Windows, dovrai utilizzare .NET Core o .NET 5. Il runtime .NET Framework precedente non è multipiattaforma e non verrà eseguito su contenitori basati su Linux.
Se non hai Docker installato sulla tua macchina di sviluppo, dovrai installare Docker Desktop per avere accesso alla CLI. Se utilizzi WSL su Windows, ti consigliamo di abilitare il motore basato su WSL 2, che offre prestazioni migliori.
Per testare le cose, creeremo una nuova applicazione API ASP.NET. La stessa procedura generale si applica a qualsiasi tipo di applicazione, poiché tutto ciò che Docker sta facendo è eseguire una build ogni volta che crei il contenitore e avviare l'applicazione con un comando entrypoint.
Crea un nuovo file chiamato Dockerfile
alla radice del tuo progetto, dove si trova la tua soluzione. Incolla nella seguente configurazione:
FROM mcr.microsoft.com/dotnet/core/sdk AS build-env WORKDIR /app # Copy csproj and restore COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -o out # Build runtime image FROM mcr.microsoft.com/dotnet/core/runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "DockerTest.dll"]
Questo Dockerfile estrae l'immagine .NET Core SDK per eseguire la compilazione. Copia il .csproj
over e ripristina, quindi copia tutto il resto ed esegue una build. Quindi, crea una nuova immagine dall'immagine .NET Runtime e copia gli artefatti di compilazione.
Infine, il punto di ingresso è qui definito come dotnet DockerTest.dll
. Questo avvierà il server Web ASP.NET, anche se potrebbe essere necessario modificare i parametri per la tua applicazione o specificare un comando del punto di ingresso completamente diverso.
Puoi testare l'esecuzione del tuo container con docker container run
, passandolo nell'ID del contenitore di build:
docker container run containerid
Per un'applicazione ASP.NET, dovrai aprire le porte mappando una porta sull'host a una porta sul container:
docker run -p 80:80 containerid
Puoi leggere la nostra guida per lavorare con Docker e Dockerfiles per saperne di più.