Condividi tramite


Strumenti per i contenitori 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 progetti ASP.NET, progetti ASP.NET Core e progetti console .NET Core e .NET Framework.

Il supporto per Docker in Visual Studio è cambiato in diverse versioni in risposta alle esigenze dei clienti. Esistono due livelli di supporto per Docker che è possibile aggiungere 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 solo un contenitore per un singolo progetto, senza usare l'orchestrazione, è possibile farlo aggiungendo il supporto Docker. Il livello successivo è il supporto dell'orchestrazione dei contenitori, che aggiunge i file di supporto appropriati per l'orchestratore specifico che scegli.

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, esaminare il file system, collegare un debugger o aprire una finestra del terminale all'interno dell'ambiente contenitore. Consultare Usare la finestra Contenitori.

Prerequisiti

Supporto di Docker in Visual Studio

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

Il supporto per Docker in Visual Studio è cambiato in diverse 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 solo un contenitore per un singolo progetto, senza usare l'orchestrazione, è possibile farlo aggiungendo il supporto Docker. Il livello successivo è il supporto dell'orchestrazione dei contenitori, che aggiunge i file di supporto appropriati per l'orchestratore specifico che scegli.

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 è Aggiungi supporto di Container Orchestrator dopo la creazione del progetto, con opzioni per l'uso di Service Fabric o Docker Compose. Non sono opzioni disponibili l'aggiunta del supporto durante la creazione del progetto e Aggiungi supporto Docker per un singolo progetto senza orchestrazione.

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

Nota

I requisiti di licenza di Docker potrebbero essere diversi per versioni diverse di Docker Desktop. Consultare la documentazione di Docker per comprendere i requisiti di licenza correnti per usare la versione di Docker Desktop per lo sviluppo nella propria situazione.

Aggiunta del supporto Docker

È possibile abilitare il supporto di Docker durante la creazione del progetto selezionando Abilitare il supporto Docker durante la creazione di 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 Windows.

È possibile aggiungere il supporto 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 del nodo del progetto per un progetto ASP.NET Core in Esplora soluzioni, come mostrato nello screenshot seguente:

Screenshot che mostra l'opzione di menu per l'aggiunta del supporto Docker in Visual Studio.

Screenshot che mostra l'opzione di menu per l'aggiunta del supporto Docker in Visual Studio.

Aggiungere il supporto di Docker

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

  • un file Dockerfile
  • un file .dockerignore
  • Riferimento a un pacchetto NuGet di Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Il Dockerfile aggiunto sarà simile al codice seguente. In questo esempio il progetto è stato denominato WebApplication-Dockered è stato scelto 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 di 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 di 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 dell'immagine del 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:

Finestre:

  • Windows Nano Server (consigliato, disponibile solo dalla versione 8.0 e successive, non preimpostato per progetti di distribuzione di compilazione nativa anticipata (AOT))
  • Windows Server Core (disponibile solo 8.0 e versioni successive)

Linux:

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

Nota

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

contesto di compilazione Docker specifica la cartella usata per la compilazione Docker. Consulta contesto di compilazione Docker. L'impostazione predefinita è la cartella della soluzione, fortemente raccomandata. 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 .dockerignore
  • Riferimento a un pacchetto NuGet di Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Il Dockerfile aggiunto sarà simile al codice seguente. In questo esempio il progetto è stato denominato WebApplication-Dockered è stato scelto 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 Containerizzare un'app .NET con 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 file di configurazione .jsonlaunchSettings.json.

Screenshot che mostra la finestra di dialogo delle opzioni di scaffolding del contenitore per aggiungere il supporto Docker con .NET SDK selezionato come tipo di build del container.

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 dell'immagine del 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 del contenitore viene salvata nel file di progetto come la proprietà ContainerBaseImage. È 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 sul tuo computer e vedere cosa accade 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 di 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 verificare, esegui l'app abilitata per Docker, apri la scheda File ed espandi la cartella dell'app per visualizzare l'app distribuita sul contenitore.

screenshot della finestra Contenitori.

screenshot della finestra Contenitori.

Per maggiori informazioni, vedere Utilizzare la finestra Container.

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. In questo modo è possibile eseguire ed eseguire il debug di un gruppo di contenitori (un'intera soluzione o un gruppo di progetti) contemporaneamente se sono definiti nello stesso file docker-compose.yml.

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

Dopo aver aggiunto il supporto dell'agente di orchestrazione del contenitore 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 docker-compose.yml esiste già, Visual Studio aggiunge solo le righe di codice di configurazione necessarie.

Ripetere il processo con gli altri progetti che si desidera controllare usando 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 sviluppare ed eseguire il debug per Azure Service Fabric, eseguire ed eseguire il debug in locale e distribuirlo 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.

Distribuzione continua e integrazione continua (CI/CD)

Visual Studio si integra facilmente con Azure Pipelines per l'integrazione automatica e continua e il recapito delle modifiche al codice e alla configurazione del servizio. Per iniziare, consulta Crea la tua prima pipeline.

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

Passaggi successivi

Per altre informazioni sull'implementazione dei servizi e sull'uso degli strumenti di Visual Studio per l'uso dei contenitori, vedere gli articoli seguenti:

Debugging delle applicazioni in un contenitore Docker locale

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

Distribuire nel servizio app di Azure

Distribuire in Azure Container Apps con Visual Studio