Guida introduttiva: Docker in Visual Studio

Con Visual Studio, puoi facilmente compilare, eseguire il debug ed eseguire applicazioni .NET, ASP.NET e ASP.NET Core containerizzate e pubblicarle sull'Azure Container Registry, su Docker Hub, sul servizio app di Azure o sul tuo registro contenitori. In questo articolo verrà pubblicata un'app ASP.NET Core in Registro Azure Container.

Prerequisiti

Installazione e configurazione

Per l'installazione di Docker, esaminare prima di tutto le informazioni in Docker Desktop per Windows: Cosa sapere prima di installare. Installare quindi Docker Desktop.

Aggiungere un progetto a un contenitore Docker

  1. Creare un nuovo progetto utilizzando il modello App Web ASP.NET Core oppure, se si desidera utilizzare .NET Framework invece di .NET Core, scegliere applicazione Web ASP.NET (.NET Framework).

  2. Nella schermata Crea nuova applicazione Web, verificare che sia selezionata la casella di controllo Abilita supporto Docker.

    screenshot della casella di controllo Abilita supporto Docker.

    Lo screenshot mostra .NET Core; se si usa .NET Framework, l'aspetto è leggermente diverso.

  3. Selezionare il tipo di contenitore desiderato (Windows o Linux) e fare clic su Crea.

Panoramica di Dockerfile

Nel progetto viene creato un Dockerfile, la ricetta per la creazione di un'immagine Docker finale. Fare riferimento a riferimento a Dockerfile per comprendere i comandi in esso contenuti.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Il dockerfile precedente si basa sull'immagine dotnet/core/aspnet e include istruzioni per modificare l'immagine di base compilando il progetto e aggiungendolo al contenitore. Se si usa .NET Framework, l'immagine di base sarà diversa.

Quando viene selezionata la casella di controllo Configura per https della finestra di dialogo del nuovo progetto, la Dockerfile espone due porte. Una porta viene usata per il traffico HTTP; l'altra porta viene usata per HTTPS. Se la casella di controllo non è selezionata, viene esposta una singola porta (80) per il traffico HTTP.

Risoluzione errori

Selezionare Docker dall'elenco a discesa debug sulla barra degli strumenti e avviare il debug dell'app. Potrebbe essere visualizzato un messaggio con una richiesta di attendibilità di un certificato; scegliere di considerare attendibile il certificato per continuare.

L'opzione Strumenti contenitore nella finestra Output mostra quali azioni sono in corso. La prima volta, potrebbe essere necessario un po' di tempo per scaricare l'immagine di base, ma è molto più veloce nelle esecuzioni successive.

Nota

Se è necessario modificare le porte per il debug, è possibile farlo nel file launchSettings.json. Consultare le impostazioni di avvio del contenitore .

Finestra contenitori

Se si dispone di Visual Studio 2019 versione 16.4 o successiva, è possibile usare la finestra contenitori per visualizzare i contenitori in esecuzione nel computer, nonché le immagini disponibili.

Aprire la finestra Contenitori usando la casella di ricerca nell'IDE (premere Ctrl+Q per usarla), digitare containere scegliere la finestra Contenitori dall'elenco.

È possibile montare la finestra contenitori in una posizione comoda, ad esempio sotto l'editor, spostandola e seguendo le guide di posizionamento della finestra.

Nella finestra trovare il contenitore e scorrere ogni scheda per visualizzare le variabili di ambiente, i mapping delle porte, i log e il file system.

screenshot della finestra Contenitori.

Per altre informazioni, vedere Utilizzare la finestra Contenitori.

Pubblicare immagini Docker

Una volta completato il ciclo di sviluppo e debug dell'app, è possibile creare un'immagine di produzione dell'app.

  1. Modificare l'elenco a discesa della configurazione in Release e compilare l'app.

  2. Fare clic con il pulsante destro del mouse sul progetto in Esplora Soluzioni e selezionare Pubblica.

  3. Nella finestra di dialogo Pubblica, selezionare la scheda Registro dei Contenitori Docker.

    screenshot della finestra di dialogo Pubblica: scegliere Registro Contenitori Docker.

  4. Scegliere Crea un nuovo Registro Azure Container.

    screenshot della finestra di dialogo Pubblica: scegliere Crea un nuovo registro Azure Container.

  5. Compilare i valori desiderati nella Creare un Nuovo Registro dei Container di Azure.

    Impostazione Valore suggerito Descrizione
    prefisso DNS Nome univoco globale Nome che identifica in modo univoco il registro contenitori.
    abbonamento Scegliere la sottoscrizione La sottoscrizione di Azure da usare.
    gruppo di risorse myResourceGroup Nome del gruppo di risorse in cui creare il registro contenitori. Scegliere Nuovo per creare un nuovo gruppo di risorse.
    SKU Standard Livello di servizio del registro contenitori
    percorso del Registro di sistema Una località vicina a te Scegli una località in un'area vicino a te o vicino ad altri servizi che utilizzeranno il registro dei container.

    Screenshot della finestra di dialogo di Visual Studio per creare un registro Azure Container.

  6. Fai clic su Crea. La finestra di dialogo Pubblica ora mostra il registro creato.

    screenshot della finestra di dialogo Pubblica che mostra il Registro Azure Container creato.

  7. Scegliere Fine per completare il processo di pubblicazione dell'immagine del contenitore nel registro appena creato in Azure.

    Screenshot che mostra la pubblicazione riuscita.

Passaggi successivi

È ora possibile fare il pull del contenitore dal registro su qualsiasi host in grado di eseguire immagini Docker, ad esempio Azure Container Instances.

Con Visual Studio, puoi facilmente compilare, eseguire il debug ed eseguire applicazioni .NET, ASP.NET e ASP.NET Core containerizzate e pubblicarle sull'Azure Container Registry, su Docker Hub, sul servizio app di Azure o sul tuo registro contenitori. In questo articolo si pubblica un'app ASP.NET Core in Registro Azure Container.

Prerequisiti

Installazione e configurazione

Per l'installazione di Docker, esaminare prima di tutto le informazioni in Docker Desktop per Windows: Cosa sapere prima di installare. Installare quindi Docker Desktop.

Aggiungere un progetto a un contenitore Docker

  1. Prima di creare il progetto di Visual Studio, assicurarsi che Docker Desktop esegua il tipo di contenitori (Windows o Linux) che si intende usare nel progetto di Visual Studio.

    Per modificare il tipo di contenitore usato da Docker Desktop, fare clic con il pulsante destro del mouse sull'icona Docker (balena) nella barra delle applicazioni e scegliere Passare a contenitori Linux o passare a contenitori Windows.

    Avvertimento

    Se si cambia il tipo di contenitore dopo aver creato il progetto di Visual Studio, il caricamento dei file di immagine Docker potrebbe non riuscire.

  2. Creare un nuovo progetto utilizzando il modello App Web ASP.NET Core oppure, se si desidera utilizzare .NET Framework invece di .NET Core, scegliere applicazione Web ASP.NET (.NET Framework).

  3. Nella schermata Crea nuova applicazione Web, verificare che sia selezionata la casella di controllo Abilita supporto Docker.

    screenshot della casella di controllo Abilita supporto Docker.

    Lo screenshot mostra la versione più recente con .NET 8.0. Se si usa .NET Framework, la finestra di dialogo ha un aspetto leggermente diverso.

  4. Selezionare il tipo di contenitore desiderato (Windows o Linux) e selezionare Crea.

Panoramica di Dockerfile

Visual Studio crea un Dockerfile nel progetto, che fornisce la ricetta per creare un'immagine Docker finale. Per altre informazioni, vedere le informazioni di riferimento Dockerfile per informazioni dettagliate sui comandi usati nel Dockerfile.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Il Dockerfile precedente si basa sull'immagine del Registro Contenitori Microsoft (MCR) .NET 8 e include istruzioni per modificare l'immagine di base compilando il progetto denominato MyWebApp e aggiungendolo al contenitore. Se si usa .NET Framework, l'immagine di base è diversa.

Quando viene selezionata la casella di controllo Configura per https della finestra di dialogo del nuovo progetto, la Dockerfile espone due porte. Una porta viene usata per il traffico HTTP; l'altra porta viene usata per HTTPS. Se la casella di controllo non è selezionata, viene esposta una singola porta (80) per il traffico HTTP.

Con Visual Studio 2022 versione 17.7 o successiva, è possibile impostare come destinazione .NET 8. In tal caso, hai il vantaggio di poter eseguire l'app in modo più sicuro, come utente normale, anziché con autorizzazioni elevate. Il Dockerfile predefinito generato dai progetti di Visual Studio per .NET 8 è configurato per l'esecuzione come utente normale. Per abilitare questo comportamento in un progetto esistente, aggiungere la riga USER app al Dockerfile nell'immagine di base. Inoltre, poiché la porta 80 è limitata agli utenti normali, esporre le porte 8080 e 8081 anziché 80 e 443. La porta 8080 viene usata per il traffico HTTP e la porta 8081 viene usata per HTTPS. Per l'esecuzione come utente normale, il contenitore deve usare un'immagine di base .NET 8 e l'app deve essere eseguita come app .NET 8. Se configurato correttamente, il Dockerfile deve contenere codice come nell'esempio seguente:

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Risoluzione errori

Selezionare Docker dall'elenco a discesa debug sulla barra degli strumenti e avviare il debug dell'app. Potrebbe essere visualizzato un messaggio con una richiesta di attendibilità di un certificato; scegliere di considerare attendibile il certificato per continuare.

L'opzione Strumenti contenitore nella finestra Output mostra quali azioni sono in corso. La prima volta, potrebbe essere necessario un po' di tempo per scaricare l'immagine di base, ma è più veloce nelle esecuzioni successive.

Al termine della compilazione, il browser apre e visualizza la home page dell'app. Nella barra degli indirizzi del browser è possibile visualizzare l'URL localhost e il numero di porta per il debug.

Nota

Se è necessario modificare le porte per il debug, è possibile farlo nel file launchSettings.json. Consultare le impostazioni di avvio del contenitore .

Finestra contenitori

È possibile usare la finestra contenitori per visualizzare i contenitori in esecuzione sulla macchina e altre immagini disponibili.

Aprire la finestra Contenitori usando la casella di ricerca nell'IDE (premere Ctrl+Q per usarla), digitare containere scegliere la finestra Contenitori dall'elenco.

È possibile montare la finestra contenitori in una posizione comoda, ad esempio sotto l'editor, spostandola e seguendo le guide di posizionamento della finestra.

Nella finestra trovare il contenitore e scorrere ogni scheda per visualizzare le variabili di ambiente, i mapping delle porte, i log e il file system.

screenshot della finestra Contenitori.

Per altre informazioni, vedere Utilizzare la finestra Contenitori.

Pubblicare immagini Docker

Una volta completato il ciclo di sviluppo e debug dell'app, è possibile creare un'immagine di produzione dell'app.

  1. Modificare l'elenco a discesa della configurazione in Release e compilare l'app.

  2. Fare clic con il pulsante destro del mouse sul progetto in Esplora Soluzioni e selezionare Pubblica.

  3. Nella finestra di dialogo Pubblica, selezionare la scheda Registro dei Contenitori Docker.

    screenshot della finestra di dialogo Pubblica: scegliere Registro Contenitori Docker.

  4. Scegliere Crea un nuovo Registro Azure Container.

    screenshot della finestra di dialogo Pubblica: scegliere Crea un nuovo registro Azure Container.

  5. Compilare i valori desiderati nella Creare un Nuovo Registro dei Container di Azure.

    Impostazione Valore suggerito Descrizione
    prefisso DNS Nome univoco globale Nome che identifica in modo univoco il registro contenitori.
    abbonamento Scegliere la sottoscrizione La sottoscrizione di Azure da usare.
    gruppo di risorse myResourceGroup Nome del gruppo di risorse in cui creare il registro contenitori. Scegliere Nuovo per creare un nuovo gruppo di risorse.
    SKU Standard Livello di servizio del registro contenitori
    percorso del Registro di sistema Una località vicina a te Scegli una località in un'area vicino a te o ad altri servizi che possono utilizzare il registro dei contenitori.

    Screenshot della finestra di dialogo di Visual Studio per creare un registro Azure Container.

  6. Selezionare Crea. La finestra di dialogo Pubblica ora mostra il registro creato.

    screenshot della finestra di dialogo Pubblica che mostra il Registro Azure Container creato.

  7. Scegliere Fine per completare il processo di pubblicazione dell'immagine del contenitore nel registro appena creato in Azure.

    Screenshot che mostra la pubblicazione riuscita.

Passaggi successivi

È ora possibile fare il pull del contenitore dal registro su qualsiasi host in grado di eseguire immagini Docker, ad esempio Azure Container Instances.

Risorse aggiuntive