Immagini Docker per ASP.NET Core

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 condotnet 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

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: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 il mapping della porta 5000 nel computer locale alla porta 8080 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 http://localhost:5000per visualizzare 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 .

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

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

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 http://localhost:5000per visualizzare 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 .

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

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

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 http://localhost:5000per visualizzare 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 .

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

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)