Guida introduttiva: Docker in Visual Studio

Con Visual Studio è possibile compilare, eseguire facilmente il debug ed eseguire in contenitori .NET, ASP.NET e ASP.NET app Core e pubblicarle in Registro Azure Container, nell'hub Docker, nel servizio app Azure o nel proprio 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 eseguire l'installazione. Installare Docker Desktop.

Aggiungere un progetto in un contenitore Docker

  1. Creare un nuovo progetto usando il modello app Web di ASP.NET Core o se si vuole usare .NET Framework invece di .NET Core, scegliere ASP.NET'applicazione Web (.NET Framework).

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

    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 appropriato (Windows o Linux) e fare clic su Crea.

Panoramica di Dockerfile

Nel progetto viene creato un Dockerfile, il file recipe per la creazione di un'immagine Docker finale. Fare riferimento a Dockerfile reference (Informazioni di riferimento su Dockerfile) per una descrizione dei comandi contenuti nel file:

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 è basato sull'immagine microsoft/aspnetcore e include le 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, il Dockerfile espone due porte. Una porta viene usata per il traffico HTTP e l'altra viene usata per il traffico HTTPS. Se la casella di controllo non è selezionata, viene esposta una singola porta (80) per il traffico HTTP.

Debug

Selezionare Docker dall'elenco a discesa debug nella barra degli strumenti e avviare il debug dell'app. È possibile che venga visualizzato un messaggio in cui viene richiesto di considerare attendibile un certificato; scegliere di considerare attendibile il certificato per continuare.

L'opzione Strumenti contenitore nella finestra Output mostra le azioni 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 di avvio Impostazioni.json. Vedere Avvio di contenitori Impostazioni.

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é 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 Usare la finestra Contenitori.

Pubblicare immagini Docker

Al termine del ciclo di sviluppo e debug dell'app, è possibile creare un'immagine di produzione dell'app.

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

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

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

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

  4. Scegliere Crea nuovo Registro Azure Container.

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

  5. Inserire i valori desiderati in Creare un nuovo Registro Azure Container.

    Impostazione Valore suggerito Descrizione
    Prefisso DNS Nome globalmente univoco Nome che identifica in modo univoco il registro contenitori.
    Abbonamento Scegliere la sottoscrizione in uso Sottoscrizione di Azure da usare.
    Gruppo di risorse myResourceGroup Nome del gruppo di risorse in cui creare il registro contenitori. Per creare un nuovo gruppo di risorse scegliere Nuovo.
    SKU Standard Livello di servizio del registro contenitori
    Percorso del registro Un percorso vicino Scegliere un Percorso in una regione nelle vicinanze o vicino ad altri servizi usati nel registro contenitori.

    Screenshot della finestra di dialogo crea Registro Azure Container di Visual Studio.

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

    Screenshot della finestra di dialogo Pubblica che mostra 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

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

Con Visual Studio è possibile compilare, eseguire facilmente il debug ed eseguire in contenitori .NET, ASP.NET e ASP.NET app Core e pubblicarle in Registro Azure Container, nell'hub Docker, nel servizio app Azure o nel proprio 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 eseguire l'installazione. Installare Docker Desktop.

Aggiungere un progetto in 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 Passa a contenitori Linux o Passa a contenitori Windows.

    Avviso

    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 usando il modello app Web di ASP.NET Core o se si vuole usare .NET Framework invece di .NET Core, scegliere ASP.NET'applicazione Web (.NET Framework).

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

    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 sul 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.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

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

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

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

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

Il Dockerfile precedente si basa sull'immagine .NET 8 (Microsoft Container Registry) .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, il Dockerfile espone due porte. Una porta viene usata per il traffico HTTP e l'altra viene usata per il traffico 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 usare .NET 8 come destinazione. 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

Debug

Selezionare Docker dall'elenco a discesa debug nella barra degli strumenti e avviare il debug dell'app. È possibile che venga visualizzato un messaggio in cui viene richiesto di considerare attendibile un certificato; scegliere di considerare attendibile il certificato per continuare.

L'opzione Strumenti contenitore nella finestra Output mostra le azioni 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 e il localhost numero di porta per il debug.

Nota

Se è necessario modificare le porte per il debug, è possibile farlo nel launchSettings.json file. Vedere Avvio di contenitori Impostazioni.

Finestra Contenitori

È possibile usare la finestra Contenitori per visualizzare i contenitori in esecuzione nel computer 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 Usare la finestra Contenitori.

Pubblicare immagini Docker

Al termine del ciclo di sviluppo e debug dell'app, è possibile creare un'immagine di produzione dell'app.

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

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

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

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

  4. Scegliere Crea nuovo Registro Azure Container.

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

  5. Inserire i valori desiderati in Creare un nuovo Registro Azure Container.

    Impostazione Valore suggerito Descrizione
    Prefisso DNS Nome globalmente univoco Nome che identifica in modo univoco il registro contenitori.
    Abbonamento Scegliere la sottoscrizione in uso Sottoscrizione di Azure da usare.
    Gruppo di risorse myResourceGroup Nome del gruppo di risorse in cui creare il registro contenitori. Per creare un nuovo gruppo di risorse scegliere Nuovo.
    SKU Standard Livello di servizio del registro contenitori
    Percorso del registro Un percorso vicino Scegliere una località in un'area vicina o vicino ad altri servizi che possono usare il registro contenitori.

    Screenshot della finestra di dialogo crea Registro Azure Container di Visual Studio.

  6. Seleziona Crea. La finestra di dialogo Pubblica mostra ora il Registro di sistema creato.

    Screenshot della finestra di dialogo Pubblica che mostra 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

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

Risorse aggiuntive