Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Avvertimento
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto in fase di anteprima che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non fornisce alcuna garanzia, espressa o implicita, in relazione alle informazioni fornite qui.
Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Questo articolo illustra come eseguire un'app ASP.NET Core nei contenitori Docker.
Windows Home Edition non supporta Hyper-V e Hyper-V è necessario per Docker.
Per informazioni su come containerizzare un'app .NET con dotnet publishdotnet publish
.
immagini Docker di ASP.NET Core
Per questa esercitazione si scarica un'app di esempio ASP.NET Core ed eseguirla nei contenitori Docker. L'esempio funziona sia con i contenitori Linux che con i contenitori Windows.
Il Dockerfile di esempio usa la funzionalità di compilazione a più fasi di Docker per compilare ed eseguire in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite in Docker Hub da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
Prerequisiti
Client Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scarica l'esempio clonando il repository .NET per Docker:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app localmente
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando seguente per compilare ed eseguire l'app in locale:
dotnet run
Passare a
http://localhost:<port>
in un browser per testare l'app.Premere CTRL+C al prompt dei comandi per arrestare l'app.
Eseguire in un contenitore Linux o in un contenitore Windows
Per eseguire in un contenitore Linux, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa a contenitori Linux.
Per eseguire in un contenitore Windows, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa ai contenitori di Windows.
Passare alla cartella Dockerfile in dotnet-docker/samples/aspnetapp.
Eseguire i comandi seguenti per compilare ed eseguire l'esempio in Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argomenti
build
del comando:- Assegnare all'immagine il nome aspnetapp.
- Cerca il Dockerfile nella cartella corrente (il punto alla fine).
Argomenti del comando di esecuzione:
- Allocare uno pseudo-TTY e mantenerlo aperto anche se non è collegato. (Stesso effetto di
--interactive --tty
.) - Rimuovere automaticamente il contenitore all'uscita.
- Associa
<port>
sul computer locale alla porta 8080 nel contenitore. - Assegnare al contenitore il nome aspnetcore_sample.
- Specificare l'immagine aspnetapp.
Passare a
http://localhost:<port>
in un browser per testare l'app.
Compilare e distribuire manualmente
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione illustra come distribuire manualmente.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish :
dotnet publish -c Release -o published
Argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Avvia l'app.
Finestre:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Vai a
http://localhost:<port>
per vedere la home page.
Per usare l'app pubblicata manualmente all'interno di un contenitore Docker, creare un nuovo Dockerfile e usare il docker build .
comando per compilare un'immagine.
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
Risorse aggiuntive
- Containerizzare un'applicazione .NET con dotnet publish
- Comando di compilazione Docker
- Comando Docker run
- Esempio Docker ASP.NET Core (quello usato in questo tutorial).
- Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico
- Uso di Visual Studio Docker Tools
- Debug con Visual Studio Code
- GC con Docker e contenitori di piccole dimensioni
- System.IO.IOException: è stato raggiunto il limite utente configurato (128) sul numero di istanze inotify
- Aggiornamenti alle immagini Docker
Passaggi successivi
Il repository Git che contiene l'app di esempio include anche la documentazione. Per una panoramica delle risorse disponibili nel repository, vedere il file README. In particolare, informazioni su come implementare HTTPS:
immagini Docker di ASP.NET Core
Per questa esercitazione si scarica un'app di esempio ASP.NET Core ed eseguirla nei contenitori Docker. L'esempio funziona sia con i contenitori Linux che con i contenitori Windows.
Il Dockerfile di esempio usa la funzionalità di compilazione a più fasi di Docker per compilare ed eseguire in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite in Docker Hub da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
Prerequisiti
Client Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scarica l'esempio clonando il repository .NET per Docker:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app localmente
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando seguente per compilare ed eseguire l'app in locale:
dotnet run
Passare a
http://localhost:<port>
in un browser per testare l'app.Premere CTRL+C al prompt dei comandi per arrestare l'app.
Eseguire in un contenitore Linux o in un contenitore Windows
Per eseguire in un contenitore Linux, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa a contenitori Linux.
Per eseguire in un contenitore Windows, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa ai contenitori di Windows.
Passare alla cartella Dockerfile in dotnet-docker/samples/aspnetapp.
Eseguire i comandi seguenti per compilare ed eseguire l'esempio in Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argomenti
build
del comando:- Assegnare all'immagine il nome aspnetapp.
- Cerca il Dockerfile nella cartella corrente (il punto alla fine).
Argomenti del comando di esecuzione:
- Allocare uno pseudo-TTY e mantenerlo aperto anche se non è collegato. (Stesso effetto di
--interactive --tty
.) - Rimuovere automaticamente il contenitore all'uscita.
- Associa
<port>
sul computer locale alla porta 8080 nel contenitore. - Assegnare al contenitore il nome aspnetcore_sample.
- Specificare l'immagine aspnetapp.
Passare a
http://localhost:<port>
in un browser per testare l'app.
Compilare e distribuire manualmente
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione illustra come distribuire manualmente.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish :
dotnet publish -c Release -o published
Argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Avvia l'app.
Finestre:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Vai a
http://localhost:<port>
per vedere la home page.
Per usare l'app pubblicata manualmente all'interno di un contenitore Docker, creare un nuovo Dockerfile e usare il docker build .
comando per compilare un'immagine.
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
Risorse aggiuntive
- Containerizzare un'applicazione .NET con dotnet publish
- Comando di compilazione Docker
- Comando Docker run
- Esempio Docker ASP.NET Core (quello usato in questo tutorial).
- Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico
- Uso di Visual Studio Docker Tools
- Debug con Visual Studio Code
- GC con Docker e contenitori di piccole dimensioni
- System.IO.IOException: è stato raggiunto il limite utente configurato (128) sul numero di istanze inotify
- Aggiornamenti alle immagini Docker
Passaggi successivi
Il repository Git che contiene l'app di esempio include anche la documentazione. Per una panoramica delle risorse disponibili nel repository, vedere il file README. In particolare, informazioni su come implementare HTTPS:
immagini Docker di ASP.NET Core
Per questa esercitazione si scarica un'app di esempio ASP.NET Core ed eseguirla nei contenitori Docker. L'esempio funziona sia con i contenitori Linux che con i contenitori Windows.
Il Dockerfile di esempio usa la funzionalità di compilazione a più fasi di Docker per compilare ed eseguire in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite in Docker Hub da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
Prerequisiti
Client Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scarica l'esempio clonando il repository .NET per Docker:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app localmente
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando seguente per compilare ed eseguire l'app in locale:
dotnet run
Passare a
http://localhost:<port>
in un browser per testare l'app.Premere CTRL+C al prompt dei comandi per arrestare l'app.
Eseguire in un contenitore Linux o in un contenitore Windows
Per eseguire in un contenitore Linux, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa a contenitori Linux.
Per eseguire in un contenitore Windows, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa ai contenitori di Windows.
Passare alla cartella Dockerfile in dotnet-docker/samples/aspnetapp.
Eseguire i comandi seguenti per compilare ed eseguire l'esempio in Docker:
docker build -t aspnetapp . docker run -it --rm -p <port>:8080 --name aspnetcore_sample aspnetapp
Argomenti
build
del comando:- Assegnare all'immagine il nome aspnetapp.
- Cerca il Dockerfile nella cartella corrente (il punto alla fine).
Argomenti del comando di esecuzione:
- Allocare uno pseudo-TTY e mantenerlo aperto anche se non è collegato. (Stesso effetto di
--interactive --tty
.) - Rimuovere automaticamente il contenitore all'uscita.
- Associa
<port>
sul computer locale alla porta 8080 nel contenitore. - Assegnare al contenitore il nome aspnetcore_sample.
- Specificare l'immagine aspnetapp.
Passare a
http://localhost:<port>
in un browser per testare l'app.
Compilare e distribuire manualmente
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione illustra come distribuire manualmente.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish :
dotnet publish -c Release -o published
Argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Avvia l'app.
Finestre:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Vai a
http://localhost:<port>
per vedere la home page.
Per usare l'app pubblicata manualmente all'interno di un contenitore Docker, creare un nuovo Dockerfile e usare il docker build .
comando per compilare un'immagine.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
Risorse aggiuntive
- Containerizzare un'applicazione .NET con dotnet publish
- Comando di compilazione Docker
- Comando Docker run
- Esempio Docker ASP.NET Core (quello usato in questo tutorial).
- Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico
- Uso di Visual Studio Docker Tools
- Debug con Visual Studio Code
- GC con Docker e contenitori di piccole dimensioni
- System.IO.IOException: è stato raggiunto il limite utente configurato (128) sul numero di istanze inotify
- Aggiornamenti alle immagini Docker
Passaggi successivi
Il repository Git che contiene l'app di esempio include anche la documentazione. Per una panoramica delle risorse disponibili nel repository, vedere il file README. In particolare, informazioni su come implementare HTTPS:
immagini Docker di ASP.NET Core
Per questa esercitazione si scarica un'app di esempio ASP.NET Core ed eseguirla nei contenitori Docker. L'esempio funziona sia con i contenitori Linux che con i contenitori Windows.
Il Dockerfile di esempio usa la funzionalità di compilazione a più fasi di Docker per compilare ed eseguire in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite in Docker Hub da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
Prerequisiti
Client Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scarica l'esempio clonando il repository .NET per Docker:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app localmente
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando seguente per compilare ed eseguire l'app in locale:
dotnet run
Passare a
http://localhost:5000
in un browser per testare l'app.Premere CTRL+C al prompt dei comandi per arrestare l'app.
Eseguire in un contenitore Linux o in un contenitore Windows
Per eseguire in un contenitore Linux, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa a contenitori Linux.
Per eseguire in un contenitore Windows, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa ai contenitori di Windows.
Passare alla cartella Dockerfile in dotnet-docker/samples/aspnetapp.
Eseguire i comandi seguenti per compilare ed eseguire l'esempio in Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argomenti
build
del comando:- Assegnare all'immagine il nome aspnetapp.
- Cerca il Dockerfile nella cartella corrente (il punto alla fine).
Argomenti del comando di esecuzione:
- Allocare uno pseudo-TTY e mantenerlo aperto anche se non è collegato. (Stesso effetto di
--interactive --tty
.) - Rimuovere automaticamente il contenitore all'uscita.
- Mappa la porta 5000 sul computer locale alla porta 80 nel contenitore.
- Assegnare al contenitore il nome aspnetcore_sample.
- Specificare l'immagine aspnetapp.
Passare a
http://localhost:5000
in un browser per testare l'app.
Compilare e distribuire manualmente
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione illustra come distribuire manualmente.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish :
dotnet publish -c Release -o published
Argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Avvia l'app.
Finestre:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Vai a
http://localhost:5000
per vedere la home page.
Per usare l'app pubblicata manualmente all'interno di un contenitore Docker, creare un nuovo Dockerfile e usare il docker build .
comando per compilare un'immagine.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
Risorse aggiuntive
- Containerizzare un'applicazione .NET con dotnet publish
- Comando di compilazione Docker
- Comando Docker run
- Esempio Docker ASP.NET Core (quello usato in questo tutorial).
- Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico
- Uso di Visual Studio Docker Tools
- Debug con Visual Studio Code
- GC con Docker e contenitori di piccole dimensioni
- System.IO.IOException: è stato raggiunto il limite utente configurato (128) sul numero di istanze inotify
- Aggiornamenti alle immagini Docker
Passaggi successivi
Il repository Git che contiene l'app di esempio include anche la documentazione. Per una panoramica delle risorse disponibili nel repository, vedere il file README. In particolare, informazioni su come implementare HTTPS:
immagini Docker di ASP.NET Core
Per questa esercitazione si scarica un'app di esempio ASP.NET Core ed eseguirla nei contenitori Docker. L'esempio funziona sia con i contenitori Linux che con i contenitori Windows.
Il Dockerfile di esempio usa la funzionalità di compilazione a più fasi di Docker per compilare ed eseguire in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite in Docker Hub da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/core/sdk
L'esempio usa questa immagine per la costruzione dell'app. L'immagine contiene .NET Core SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo locale, il debug e gli unit test. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
dotnet/core/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie core di ASP.NET ed è ottimizzato per l'esecuzione di app nell'ambiente di produzione. Progettato per velocizzare la distribuzione e l'avvio dell'app, l'immagine è relativamente piccola, quindi le prestazioni di rete dal Registro Docker all'host Docker sono ottimizzate. Solo i file binari e il contenuto necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, per consentire il tempo più rapido da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello Docker.
Prerequisiti
Client Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scarica l'esempio clonando il repository .NET per Docker:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app localmente
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando seguente per compilare ed eseguire l'app in locale:
dotnet run
Passare a
http://localhost:5000
in un browser per testare l'app.Premere CTRL+C al prompt dei comandi per arrestare l'app.
Eseguire in un contenitore Linux o in un contenitore Windows
Per eseguire in un contenitore Linux, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa a contenitori Linux.
Per eseguire in un contenitore Windows, fare clic con il pulsante destro del mouse sull'icona del client Docker di System Tray e scegliere Passa ai contenitori di Windows.
Passare alla cartella Dockerfile in dotnet-docker/samples/aspnetapp.
Eseguire i comandi seguenti per compilare ed eseguire l'esempio in Docker:
docker build -t aspnetapp . docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
Argomenti
build
del comando:- Assegnare all'immagine il nome aspnetapp.
- Cerca il Dockerfile nella cartella corrente (il punto alla fine).
Argomenti del comando di esecuzione:
- Allocare uno pseudo-TTY e mantenerlo aperto anche se non è collegato. (Stesso effetto di
--interactive --tty
.) - Rimuovere automaticamente il contenitore all'uscita.
- Mappa la porta 5000 sul computer locale alla porta 80 nel contenitore.
- Assegnare al contenitore il nome aspnetcore_sample.
- Specificare l'immagine aspnetapp.
Passare a
http://localhost:5000
in un browser per testare l'app.
Compilare e distribuire manualmente
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione illustra come distribuire manualmente.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish :
dotnet publish -c Release -o published
Argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Avvia l'app.
Finestre:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Vai a
http://localhost:5000
per vedere la home page.
Per usare l'app pubblicata manualmente all'interno di un contenitore Docker, creare un nuovo Dockerfile e usare il docker build .
comando per compilare un'immagine.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Per visualizzare la nuova immagine, usare il docker images
comando .
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /source/aspnetapp
RUN dotnet publish -c release -o /app --no-restore
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Come indicato nel Dockerfile precedente, i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY published/ ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
The Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza.
dotnet publish
Usa la stessa procedura eseguita in questa sezione per compilare e distribuire.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
Nel Dockerfile precedente i *.csproj
file vengono copiati e ripristinati come livelli distinti. Quando il docker build
comando compila un'immagine, usa una cache predefinita. Se i *.csproj
file non sono stati modificati dopo l'ultima esecuzione del docker build
comando, il dotnet restore
comando non deve essere eseguito di nuovo. La cache predefinita per il livello corrispondente dotnet restore
viene invece riutilizzata. Per altre informazioni, vedere Procedure consigliate per la scrittura di Dockerfile.
Risorse aggiuntive
- Containerizzare un'applicazione .NET con dotnet publish
- Comando di compilazione Docker
- Comando Docker run
- Esempio Docker ASP.NET Core (quello usato in questo tutorial).
- Configurare ASP.NET Core per l'uso con server proxy e servizi di bilanciamento del carico
- Uso di Visual Studio Docker Tools
- Debug con Visual Studio Code
- GC con Docker e contenitori di piccole dimensioni
- System.IO.IOException: è stato raggiunto il limite utente configurato (128) sul numero di istanze inotify
Passaggi successivi
Il repository Git che contiene l'app di esempio include anche la documentazione. Per una panoramica delle risorse disponibili nel repository, vedere il file README. In particolare, informazioni su come implementare HTTPS: