Strumenti contenitore di Visual Studio per Docker

Gli strumenti inclusi in Visual Studio per lo sviluppo con contenitori Docker sono facili da usare e semplificano notevolmente la compilazione, il debug e la distribuzione per le applicazioni in contenitori. È possibile usare un contenitore per un singolo progetto oppure usare l'orchestrazione dei contenitori con Docker Compose o Service Fabric per usare più servizi nei contenitori.

Prerequisiti

Supporto di Docker in Visual Studio

Il supporto di Docker è disponibile per i progetti ASP.NET, i progetti ASP.NET Core e i progetti di console .NET Core e .NET Framework.

Il supporto per Docker in Visual Studio è cambiato nel corso di varie versioni in risposta alle esigenze dei clienti. Esistono due livelli di supporto di Docker che è possibile aggiungere a un progetto e le opzioni supportate variano a seconda del tipo di progetto e della versione di Visual Studio. Con alcuni tipi di progetto supportati, se si vuole semplicemente un contenitore per un singolo progetto, senza usare l'orchestrazione, è possibile farlo aggiungendo il supporto di Docker. Il livello successivo è rappresentato dal supporto dell'orchestrazione dei contenitori, che aggiunge i file di supporto appropriati per lo specifico agente di orchestrazione scelto.

Con Visual Studio 2019 è possibile usare Docker Compose, Kubernetes e Service Fabric come servizi di orchestrazione dei contenitori.

Nota

Quando si crea un progetto console .NET Framework o .NET Core, non è possibile aggiungere il supporto docker. Dopo aver creato un progetto di applicazione console .NET Core, è disponibile l'opzione Aggiungi supporto Docker. I progetti di applicazione console .NET Framework non supportano l'opzione Aggiungi supporto Docker dopo la creazione del progetto. Dopo aver creato entrambi i progetti console .NET Framework o .NET Core, supportano l'opzione Add Container Orchestrator Support usando Service Fabric o Docker Compose.

In Visual Studio 2019 versione 16.4 e successive è disponibile la finestra Contenitori, che consente di visualizzare i contenitori in esecuzione, esplorare le immagini disponibili, visualizzare le variabili di ambiente, i log e i mapping delle porte, controllare il file system, collegare un debugger o aprire una finestra del terminale all'interno dell'ambiente contenitore. Vedere Usare la finestra Contenitori.

Prerequisiti

Supporto di Docker in Visual Studio

Il supporto di Docker è disponibile per i progetti ASP.NET, i progetti ASP.NET Core e i progetti di console .NET Core e .NET Framework.

Il supporto per Docker in Visual Studio è cambiato nel corso di varie versioni in risposta alle esigenze dei clienti. Sono disponibili diverse opzioni per aggiungere il supporto Docker a un progetto e le opzioni supportate variano in base al tipo di progetto e alla versione di Visual Studio. Con alcuni tipi di progetto supportati, se si vuole semplicemente un contenitore per un singolo progetto, senza usare l'orchestrazione, è possibile farlo aggiungendo il supporto di Docker. Il livello successivo è rappresentato dal supporto dell'orchestrazione dei contenitori, che aggiunge i file di supporto appropriati per lo specifico agente di orchestrazione scelto.

Con Visual Studio 2022 versione 17.9 e successive, quando si aggiunge il supporto Docker a un progetto .NET 7 o versione successiva, sono disponibili due tipi di compilazione del contenitore tra cui scegliere per l'aggiunta del supporto docker. È possibile scegliere di aggiungere un Dockerfile per specificare come compilare le immagini del contenitore oppure scegliere di usare il supporto predefinito del contenitore fornito da .NET SDK.

Inoltre, con Visual Studio 2022 e versioni successive, quando si sceglie l'orchestrazione dei contenitori, è possibile usare Docker Compose o Service Fabric come servizi di orchestrazione dei contenitori.

Nota

Se si usa il modello di progetto console .NET Framework completo, l'opzione supportata è Aggiungere il supporto di Container Orchestrator dopo la creazione del progetto, con opzioni per l'uso di Service Fabric o Docker Compose. L'aggiunta del supporto alla creazione del progetto e l'aggiunta del supporto Docker per un singolo progetto senza orchestrazione non sono disponibili opzioni.

In Visual Studio 2022 è disponibile la finestra Contenitori , che consente di visualizzare i contenitori in esecuzione, esplorare le immagini disponibili, visualizzare le variabili di ambiente, i log e i mapping delle porte, controllare il file system, collegare un debugger o aprire una finestra del terminale all'interno dell'ambiente contenitore. Vedere Usare la finestra Contenitori.

Nota

I requisiti di licenza di Docker potrebbero essere diversi per versioni diverse di Docker Desktop. Fare riferimento alla documentazione di Docker per comprendere i requisiti di licenza correnti per l'uso della versione di Docker Desktop per lo sviluppo nella situazione in uso.

Aggiunta del supporto per Docker

È possibile abilitare il supporto di Docker durante la creazione del progetto selezionando Abilita supporto Docker quando si crea un nuovo progetto, come illustrato nello screenshot seguente:

Screenshot che mostra come abilitare il supporto Docker per la nuova app Web ASP.NET Core in Visual Studio.

Screenshot che mostra come abilitare il supporto Docker per la nuova app Web ASP.NET Core in Visual Studio.

Nota

Per i progetti .NET Framework (non .NET Core) sono disponibili solo i contenitori di Windows.

È possibile aggiungere il supporto di Docker a un progetto esistente selezionando Aggiungi>Supporto Docker in Esplora soluzioni. I comandi Aggiungi > supporto Docker e Aggiungi > supporto orchestrazione contenitori si trovano nel menu di scelta rapida (o nel menu di scelta rapida) del nodo del progetto per un progetto ASP.NET Core in Esplora soluzioni, come illustrato nello screenshot seguente:

Screenshot che mostra come aggiungere l'opzione di menu Supporto Docker in Visual Studio.

Screenshot che mostra come aggiungere l'opzione di menu Supporto Docker in Visual Studio.

Aggiungere il supporto di Docker

Quando si aggiunge o si abilita il supporto di Docker, Visual Studio aggiunge quanto segue al progetto:

  • Un file Dockerfile
  • un .dockerignore file
  • Un riferimento al pacchetto NuGet per Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Il Dockerfile aggiunto sarà simile al codice seguente. In questo esempio il progetto è stato denominato WebApplication-Dockere sono stati scelti contenitori Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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

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

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

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

Aggiungere il supporto docker usando il tipo di compilazione del contenitore Dockerfile

Quando si aggiunge o si abilita il supporto Docker a un progetto .NET 7 o versione successiva, Visual Studio visualizza la finestra di dialogo Opzioni di scaffolding dei contenitori, che offre la scelta del sistema operativo (Linux o Windows), ma anche la possibilità di scegliere il tipo di compilazione del contenitore, Dockerfile o .NET SDK. Questa finestra di dialogo non viene visualizzata nei progetti .NET Framework o nei progetti Funzioni di Azure.

Nella versione 17.11 e successive è anche possibile specificare la distribuzione dell'immagine del contenitore e il contesto di compilazione Docker.

Screenshot che mostra la finestra di dialogo Opzioni di scaffolding del contenitore per l'aggiunta del supporto docker.

Distribuzione immagine contenitore specifica l'immagine del sistema operativo usata dai contenitori come immagine di base. Questo elenco cambia se si passa da Linux a Windows come tipo di contenitore.

Sono disponibili le immagini seguenti:

Windows:

  • Windows Nano Server (consigliato, disponibile solo 8.0 e versioni successive, non preimpostato per i progetti di distribuzione AOT (Native Ahead-of-Time)
  • Windows Server Core (disponibile solo 8.0 e versioni successive)

Linux:

  • Predefinito (Debian, ma il tag è "8.0")
  • Debian
  • Ubuntu
  • Ubuntu cesellato
  • Alpine

Nota

I contenitori basati sull'immagine Ubuntu selezionata e che usano la distribuzione AOT (Native Ahead-of-Time) possono essere sottoposto a debug solo in modalità rapida. Vedere Personalizzare i contenitori Docker in Visual Studio.

Docker Build Context specifica la cartella usata per la compilazione Docker. Vedere Contesto di compilazione docker. Il valore predefinito è la cartella della soluzione, consigliata. Tutti i file necessari per una compilazione devono trovarsi in questa cartella, che in genere non è il caso se si sceglie la cartella del progetto o un'altra cartella.

Se si sceglie Dockerfile, Visual Studio aggiunge quanto segue al progetto:

  • Un file Dockerfile
  • Un file con estensione dockerignore
  • Un riferimento al pacchetto NuGet per Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Il Dockerfile aggiunto sarà simile al codice seguente. In questo esempio il progetto è stato denominato WebApplication-Dockere sono stati scelti contenitori Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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

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

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

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

Inserire in un contenitore un'app .NET senza un Dockerfile

Con Visual Studio 2022 17.9 e versioni successive con .NET 7 SDK installato, nei progetti ASP.NET Core destinati a .NET 6 o versione successiva, è possibile usare il supporto predefinito di .NET SDK per le compilazioni di contenitori, il che significa che non è necessario un Dockerfile; vedere Containerize a .NET app with dotnet publish (Containerize a .NET app with dotnet publish). I contenitori vengono invece configurati usando le proprietà MSBuild nel file di progetto e le impostazioni per l'avvio dei contenitori con Visual Studio vengono codificate in un .json file di configurazione launchSettings.json.

Screenshot che mostra la finestra di dialogo Opzioni di scaffolding del contenitore per l'aggiunta del supporto Docker con .NET SDK selezionato come tipo di compilazione del contenitore.

In questo caso, scegliere .NET SDK come tipo di compilazione del contenitore per usare la gestione dei contenitori di .NET SDK anziché un Dockerfile.

Distribuzione immagine contenitore specifica l'immagine del sistema operativo usata dai contenitori come immagine di base. Questo elenco cambia se si passa da Linux a Windows come contenitore. Per un elenco delle immagini disponibili, vedere la sezione precedente.

La voce di compilazione del contenitore .NET SDK in launchSettings.json è simile al codice seguente:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

.NET SDK gestisce alcune delle impostazioni che sarebbero state codificate in un Dockerfile, ad esempio l'immagine di base del contenitore e le variabili di ambiente da impostare. Le impostazioni disponibili nel file di progetto per la configurazione del contenitore sono elencate in Personalizzazione del contenitore. Ad esempio, la distribuzione dell'immagine contenitore viene salvata nel file di progetto come ContainerBaseImage proprietà . È possibile modificarlo in un secondo momento modificando il file di progetto.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

Usare la finestra Contenitori

La finestra Contenitori consente di visualizzare i contenitori e le immagini nel computer e vedere cosa succede con loro. È possibile visualizzare il file system, i volumi montati, le variabili di ambiente, le porte usate ed esaminare i file di log.

Aprire la finestra Contenitori usando l'avvio rapido (CTRL+Q) e digitando .containers È possibile usare i controlli di ancoraggio per posizionare la finestra da qualche parte. A causa della larghezza della finestra, funziona meglio quando è ancorato nella parte inferiore dello schermo.

Selezionare un contenitore e usare le schede per visualizzare le informazioni disponibili. Per estrarlo, eseguire l'app abilitata per Docker, aprire la scheda File ed espandere la cartella dell'app per visualizzare l'app distribuita nel contenitore.

Screenshot della finestra Contenitori.

Screenshot della finestra Contenitori.

Per altre informazioni, vedere Usare la finestra Contenitori.

Supporto di Docker Compose

Quando si vuole comporre una soluzione multi-contenitore usando Docker Compose, aggiungere il supporto dell'agente di orchestrazione dei contenitori ai progetti. Ciò consente di eseguire un gruppo di contenitori (un'intera soluzione o un gruppo di progetti) e di eseguirne il debug contemporaneamente, se sono definiti nello stesso file docker-compose.yml.

Per aggiungere il supporto dell'agente di orchestrazione dei contenitori usando Docker Compose, fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliere Aggiungi > supporto orchestratore contenitori. Scegliere quindi Docker Compose per gestire i contenitori.

Dopo aver aggiunto il supporto dell'agente di orchestrazione dei contenitori al progetto, viene visualizzato un Dockerfile aggiunto al progetto (se non ne esiste già uno) e una cartella docker-compose aggiunta alla soluzione in Esplora soluzioni, come illustrato di seguito:

Screenshot dei file Docker in Esplora soluzioni in Visual Studio.

Screenshot dei file Docker in Esplora soluzioni in Visual Studio.

Se il file docker-compose.yml esiste già, Visual Studio aggiunge solo le righe del codice di configurazione necessarie in tale file.

Ripetere il processo con gli altri progetti che si vuole controllare tramite Docker Compose.

Se si lavora con un numero elevato di servizi, è possibile risparmiare tempo e risorse di calcolo selezionando il subset di servizi da avviare nella sessione di debug. Vedere Avviare un subset di servizi Compose.

Nota

Si noti che gli host Docker remoti non sono supportati negli strumenti di Visual Studio.

Supporto di Service Fabric

Con gli strumenti di Service Fabric in Visual Studio è possibile occuparsi dello sviluppo e del debug per Azure Service Fabric, gestire l'esecuzione e il debug in locale ed eseguire la distribuzione in Azure.

Visual Studio 2019 e versioni successive supportano lo sviluppo di microservizi in contenitori con contenitori Windows e orchestrazione di Service Fabric.

Per un'esercitazione dettagliata, vedere Esercitazione: Distribuire un'applicazione .NET in un contenitore Windows in Azure Service Fabric.

Per altre informazioni su Azure Service Fabric, vedere Service Fabric.

Recapito continuo e integrazione continua (CI/CD)

Visual Studio si integra facilmente con Azure Pipelines per l'integrazione e il recapito continui e automatizzati delle modifiche al codice e alla configurazione del servizio. Per iniziare, vedere Creare la prima pipeline.

Per Service Fabric, vedere Esercitazione: Distribuire l'app ASP.NET Core in Azure Service Fabric usando Azure DevOps Projects.

Passaggi successivi

Per altri dettagli sull'implementazione dei servizi e l'uso degli strumenti di Visual Studio per usare i contenitori, vedere gli articoli seguenti:

Debug delle applicazioni in un contenitore Docker locale

Distribuire un contenitore ASP.NET in un registro contenitori con Visual Studio