Condividi tramite


Eseguire un'app ASP.NET Core nei contenitori Docker

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

Scaricare l'app di esempio

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

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

Scaricare l'app di esempio

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

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

Scaricare l'app di esempio

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

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

Scaricare l'app di esempio

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

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

Scaricare l'app di esempio

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

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: