Eseguire un'app ASP.NET Core nei contenitori Docker
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Avviso
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 non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 un'app .NET in contenitori con dotnet publish
.
Immagini Docker per ASP.NET Core
Per questa esercitazione si scaricherà un'app di esempio ASP.NET Core, che verrà eseguita in contenitori Docker. L'esempio usa contenitori sia Linux che Windows.
Il documento Dockerfile di esempio usa la funzionalità di compilazione in più fasi di Docker per la compilazione e l'esecuzione in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite nell'hub Docker da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la compilazione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo, il debug e il testing unità locali. 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 ASP.NET Core ed è ottimizzata per l'esecuzione di app nell'ambiente di produzione. Progettata per offrire velocità di distribuzione e avvio dell'app, l'immagine è relativamente piccola, in modo da ottimizzare le prestazioni di rete dal registro Docker all'host Docker. Solo i file binari e i contenuti necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, fornendo i tempi più rapidi da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello di Docker.
Prerequisiti
Client di Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scaricare l'esempio clonando il repository Docker .NET:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app in locale
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 di 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
Gli argomenti del comando
build
:- Denominano l'immagine aspnetapp.
- Cercano il documento Dockerfile nella cartella corrente (il punto alla fine).
Gli argomenti del comando run:
- Allocano uno pseudo TTY e lo tengono aperto anche se non è collegato (stesso effetto di
--interactive --tty
). - Rimuovono automaticamente il contenitore quando viene chiuso.
- Eseguire
<port>
il mapping nel computer locale alla porta 8080 nel contenitore. - Denominano il contenitore aspnetcore_sample.
- Specificano l'immagine aspnetapp.
Passare a
http://localhost:<port>
in un browser per testare l'app.
Compilazione e distribuzione manuali
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione mostra come eseguire manualmente la distribuzione.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish:
dotnet publish -c Release -o published
Gli argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Eseguire l'app.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Passare a per
http://localhost:<port>
visualizzare la home pagina.
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 .
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
# 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'app .NET con dotnet publish
- Comando build di Docker
- Comando run di Docker
- Esempio di Docker per ASP.NET Core (usato in questa esercitazione)
- Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico
- Working with Visual Studio Docker Tools (Uso degli strumenti Docker per Visual Studio)
- Debugging with Visual Studio Code (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 LEGGIMI. In particolare, vedere le informazioni su come implementare HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS)
Immagini Docker per ASP.NET Core
Per questa esercitazione si scaricherà un'app di esempio ASP.NET Core, che verrà eseguita in contenitori Docker. L'esempio usa contenitori sia Linux che Windows.
Il documento Dockerfile di esempio usa la funzionalità di compilazione in più fasi di Docker per la compilazione e l'esecuzione in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite nell'hub Docker da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la compilazione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo, il debug e il testing unità locali. 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 ASP.NET Core ed è ottimizzata per l'esecuzione di app nell'ambiente di produzione. Progettata per offrire velocità di distribuzione e avvio dell'app, l'immagine è relativamente piccola, in modo da ottimizzare le prestazioni di rete dal registro Docker all'host Docker. Solo i file binari e i contenuti necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, fornendo i tempi più rapidi da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello di Docker.
Prerequisiti
Client di Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scaricare l'esempio clonando il repository Docker .NET:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app in locale
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 di 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
Gli argomenti del comando
build
:- Denominano l'immagine aspnetapp.
- Cercano il documento Dockerfile nella cartella corrente (il punto alla fine).
Gli argomenti del comando run:
- Allocano uno pseudo TTY e lo tengono aperto anche se non è collegato (stesso effetto di
--interactive --tty
). - Rimuovono automaticamente il contenitore quando viene chiuso.
- Eseguono il mapping della porta 5000 nel computer locale alla porta 80 nel contenitore.
- Denominano il contenitore aspnetcore_sample.
- Specificano l'immagine aspnetapp.
Passare a
http://localhost:5000
in un browser per testare l'app.
Compilazione e distribuzione manuali
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione mostra come eseguire manualmente la distribuzione.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish:
dotnet publish -c Release -o published
Gli argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Eseguire l'app.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Passare a per
http://localhost:5000
visualizzare la home pagina.
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 .
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
# 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'app .NET con dotnet publish
- Comando build di Docker
- Comando run di Docker
- Esempio di Docker per ASP.NET Core (usato in questa esercitazione)
- Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico
- Working with Visual Studio Docker Tools (Uso degli strumenti Docker per Visual Studio)
- Debugging with Visual Studio Code (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 LEGGIMI. In particolare, vedere le informazioni su come implementare HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS)
Immagini Docker per ASP.NET Core
Per questa esercitazione si scaricherà un'app di esempio ASP.NET Core, che verrà eseguita in contenitori Docker. L'esempio usa contenitori sia Linux che Windows.
Il documento Dockerfile di esempio usa la funzionalità di compilazione in più fasi di Docker per la compilazione e l'esecuzione in contenitori diversi. I contenitori di compilazione ed esecuzione vengono creati da immagini fornite nell'hub Docker da Microsoft:
dotnet/sdk
L'esempio usa questa immagine per la compilazione dell'app. L'immagine contiene .NET SDK, che include gli strumenti da riga di comando. L'immagine è ottimizzata per lo sviluppo, il debug e il testing unità locali. Gli strumenti installati per lo sviluppo e la compilazione rendono l'immagine relativamente grande.
dotnet/core/sdk
L'esempio usa questa immagine per la compilazione dell'app. L'immagine contiene .NET Core SDK, che include strumenti da riga di comando (interfaccia della riga di comando). L'immagine è ottimizzata per lo sviluppo, il debug e il testing unità locali. 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 ASP.NET Core ed è ottimizzata per l'esecuzione di app nell'ambiente di produzione. Progettata per offrire velocità di distribuzione e avvio dell'app, l'immagine è relativamente piccola, in modo da ottimizzare le prestazioni di rete dal registro Docker all'host Docker. Solo i file binari e i contenuti necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, fornendo i tempi più rapidi da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello di Docker.
dotnet/core/aspnet
L'esempio usa questa immagine per l'esecuzione dell'app. L'immagine contiene il runtime e le librerie ASP.NET Core ed è ottimizzata per l'esecuzione di app nell'ambiente di produzione. Progettata per offrire velocità di distribuzione e avvio dell'app, l'immagine è relativamente piccola, in modo da ottimizzare le prestazioni di rete dal registro Docker all'host Docker. Solo i file binari e i contenuti necessari per eseguire un'app vengono copiati nel contenitore. I contenuti sono pronti per l'esecuzione, fornendo i tempi più rapidi da
docker run
all'avvio dell'app. La compilazione dinamica del codice non è necessaria nel modello di Docker.
Prerequisiti
Client di Docker 18.03 o versione successiva
Scaricare l'app di esempio
Scaricare l'esempio clonando il repository Docker .NET:
git clone https://github.com/dotnet/dotnet-docker
Eseguire l'app in locale
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 di 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
Gli argomenti del comando
build
:- Denominano l'immagine aspnetapp.
- Cercano il documento Dockerfile nella cartella corrente (il punto alla fine).
Gli argomenti del comando run:
- Allocano uno pseudo TTY e lo tengono aperto anche se non è collegato (stesso effetto di
--interactive --tty
). - Rimuovono automaticamente il contenitore quando viene chiuso.
- Eseguono il mapping della porta 5000 nel computer locale alla porta 80 nel contenitore.
- Denominano il contenitore aspnetcore_sample.
- Specificano l'immagine aspnetapp.
Passare a
http://localhost:5000
in un browser per testare l'app.
Compilazione e distribuzione manuali
In alcuni scenari, potrebbe essere necessario distribuire un'app in un contenitore copiandone gli asset necessari in fase di esecuzione. Questa sezione mostra come eseguire manualmente la distribuzione.
Passare alla cartella del progetto in dotnet-docker/samples/aspnetapp/aspnetapp.
Eseguire il comando dotnet publish:
dotnet publish -c Release -o published
Gli argomenti del comando:
- Compilare l'app in modalità di rilascio (il valore predefinito è la modalità di debug).
- Creare gli asset nella cartella pubblicata .
Eseguire l'app.
Windows:
dotnet published\aspnetapp.dll
Linux:
dotnet published/aspnetapp.dll
Passare a per
http://localhost:5000
visualizzare la home pagina.
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 .
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
# 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 .
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
# 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"]
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
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"]
Dockerfile
Ecco il Dockerfile usato dal docker build
comando eseguito in precedenza. Usa dotnet publish
allo stesso modo in cui è stato usato in questa sezione per la compilazione e la distribuzione.
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'app .NET con dotnet publish
- Comando build di Docker
- Comando run di Docker
- Esempio di Docker per ASP.NET Core (usato in questa esercitazione)
- Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico
- Working with Visual Studio Docker Tools (Uso degli strumenti Docker per Visual Studio)
- Debugging with Visual Studio Code (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 LEGGIMI. In particolare, vedere le informazioni su come implementare HTTPS:
Developing ASP.NET Core Applications with Docker over HTTPS (Sviluppo di applicazioni ASP.NET Core con Docker su HTTPS)