Dela via


Visual Studio Containerverktyg för Docker

De verktyg som ingår i Visual Studio för utveckling med Docker-containrar är enkla att använda och förenklar avsevärt skapandet, felsökningen och distributionen för containerbaserade program. Du kan arbeta med en container för ett enda projekt eller använda containerorkestrering med Docker Compose eller Service Fabric för att arbeta med flera tjänster i containrar.

Förutsättningar

Docker-stöd i Visual Studio

Docker-stöd är tillgängligt för ASP.NET projekt, ASP.NET Core-projekt och .NET Core- och .NET Framework-konsolprojekt.

Stödet för Docker i Visual Studio har ändrats under ett antal versioner som svar på kundernas behov. Det finns två nivåer av Docker-stöd som du kan lägga till i ett projekt, och alternativen som stöds varierar beroende på typ av projekt och version av Visual Studio. Med vissa projekttyper som stöds kan du göra det genom att lägga till Docker-stöd om du bara vill ha en container för ett enda projekt, utan att använda orkestrering. Nästa nivå är stöd för containerorkestrering, vilket lägger till lämpliga stödfiler för den orkestrering du väljer.

Med Visual Studio 2019 kan du använda Docker Compose, Kubernetes och Service Fabric som containerorkestreringstjänster.

Notera

När du skapar ett .NET Framework- eller .NET Core-konsolprojekt finns det inget alternativ för att Lägg till Docker-stöd. När ett .NET Core-konsolprogramprojekt har skapats är alternativet Lägg till Docker-stöd tillgängligt. .NET Framework-konsolprogramprojekt stöder inte alternativet Lägg till Docker-stöd när projektet har skapats. När du har skapat både .NET Framework- eller .NET Core-konsolprojekt stöds alternativet Lägg till stöd för Container Orchestrator med hjälp av Service Fabric eller Docker Compose.

I Visual Studio 2019 version 16.4 och senare är fönstret Containers tillgängligt, där du kan visa containrar som körs, bläddra bland tillgängliga bilder, visa miljövariabler, loggar och portmappningar, inspektera filsystemet, bifoga ett felsökningsprogram eller öppna ett terminalfönster i containermiljön. Se Använd fönstret Behållare.

Förutsättningar

Docker-stöd i Visual Studio

Docker-stöd är tillgängligt för ASP.NET projekt, ASP.NET Core-projekt och .NET Core- och .NET Framework-konsolprojekt.

Stödet för Docker i Visual Studio har ändrats under ett antal versioner som svar på kundernas behov. Det finns flera alternativ för att lägga till Docker-stöd i ett projekt, och alternativen som stöds varierar beroende på typ av projekt och version av Visual Studio. Med vissa projekttyper som stöds kan du göra det genom att lägga till Docker-stöd om du bara vill ha en container för ett enda projekt, utan att använda orkestrering. Nästa nivå är stöd för containerorkestrering, vilket lägger till lämpliga stödfiler för den orkestrering du väljer.

Med Visual Studio 2022 version 17.9 och senare, när du lägger till Docker-stöd i ett .NET 7- eller senare projekt, har du två typer av containerbyggen att välja mellan för att lägga till Docker-stöd. Du kan välja att lägga till en Dockerfile för att ange hur containeravbildningarna ska skapas, eller så kan du välja att använda det inbyggda containerstöd som tillhandahålls av .NET SDK.

Med Visual Studio 2022 och senare, när du väljer containerorkestrering, kan du också använda Docker Compose eller Service Fabric som containerorkestreringstjänster.

Notera

Om du använder den fullständiga .NET Framework-konsolprojektmallen är det alternativ som stöds Lägg till stöd för Container Orchestrator efter att projektet har skapats, med alternativ för att använda Service Fabric eller Docker Compose. Att lägga till stöd vid projektskapande och Lägg till Docker-stöd för ett enda projekt utan orkestrering är inte tillgängliga alternativ.

I Visual Studio 2022 är fönstret Containers tillgängligt, vilket gör att du kan visa containrar som körs, bläddra bland tillgängliga bilder, visa miljövariabler, loggar och portmappningar, inspektera filsystemet, bifoga ett felsökningsprogram eller öppna ett terminalfönster i containermiljön. Se Använd Containerfönstret.

Anteckning

Docker-licenskraven kan skilja sig åt för olika versioner av Docker Desktop. Se Docker-dokumentationen för att förstå de aktuella licenskraven för att använda din version av Docker Desktop för utveckling i din situation.

Lägga till Docker-stöd

Du kan aktivera Docker-stöd när projektet skapas genom att välja Aktivera Docker-support när du skapar ett nytt projekt, enligt följande skärmbild:

Skärmbild som visar hur du aktiverar Docker-stöd för ny ASP.NET Core-webbapp i Visual Studio.

Skärmbild som visar hur du aktiverar Docker-stöd för ny ASP.NET Core-webbapp i Visual Studio.

Not

För .NET Framework-projekt (inte .NET Core) är endast Windows-containrar tillgängliga.

Du kan lägga till Docker-stöd i ett befintligt projekt genom att välja Add>Docker Support in Solution Explorer. Kommandona Add > Docker Support och Add > Container Orchestrator Support finns på snabbmenyn för projektnoden i ett ASP.NET Core-projekt i Solution Explorer, som visas i följande skärmbild:

Skärmbild som visar hur du lägger till menyalternativet Docker Support i Visual Studio.

Skärmbild som visar hur du lägger till menyalternativet Docker Support i Visual Studio.

Lägga till Docker-stöd

När du lägger till eller aktiverar Docker-stöd lägger Visual Studio till följande i projektet:

  • en Dockerfile-fil
  • en fil-.dockerignore
  • en NuGet-paketreferens till Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Den Dockerfile som du lägger till liknar följande kod. I det här exemplet fick projektet namnet WebApplication-Dockeroch du valde Linux-containrar:

#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"]

Lägg till Docker-stöd med hjälp av dockerfile-containerns byggtyp

När du lägger till eller aktiverar Docker-stöd i ett .NET 7- eller senare projekt visar Visual Studio dialogrutan Alternativ för containerställningar, vilket ger dig möjlighet att välja operativsystem (Linux eller Windows), men även möjligheten att välja containerbyggtyp, antingen Dockerfile eller .NET SDK. Den här dialogrutan visas inte i .NET Framework-projekt eller Azure Functions-projekt.

I 17.11 och senare kan du också ange Container Image Distro och Docker Build Context.

Skärmbild som visar dialogrutan för Container Scaffolding-alternativ för att lägga till Docker-stöd.

Container Image Distro anger vilken OS-avbildning dina containrar använder som basavbildning. Den här listan ändras om du växlar mellan Linux och Windows som containertyp.

Följande bilder är tillgängliga:

Windows:

  • Windows Nano Server (rekommenderas, endast tillgängligt i version 8.0 och senare, inte förinstallerat för Native Ahead-of-time (AOT) distribution projekt)
  • Windows Server Core (endast tillgängligt 8.0 och senare)

Linux:

  • Standard (Debian, men taggen är "8.0")
  • Debian
  • Ubuntu
  • Raffinerad Ubuntu
  • Alpin

Not

Containrar baserade på Chisel Ubuntu-avbildningen som använder Native Ahead-of-time (AOT)-distribution kan bara felsökas i snabbläge. Se Anpassa Docker-containrar i Visual Studio.

Docker Build Context anger mappen som används för Docker-versionen. Se Docker-byggsammanhang. Standardinställningen är lösningsmappen, vilket rekommenderas starkt. Alla filer som behövs för en version måste finnas under den här mappen, vilket vanligtvis inte är fallet om du väljer projektmappen eller någon annan mapp.

Om du väljer Dockerfilelägger Visual Studio till följande i projektet:

  • en Dockerfile-fil
  • en .dockerignore-fil
  • en NuGet-paketreferens till Microsoft.VisualStudio.Azure.Containers.Tools.Targets

Den Dockerfile som du lägger till liknar följande kod. I det här exemplet fick projektet namnet WebApplication-Dockeroch du valde Linux-containrar:

#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"]

Containerisera en .NET-app utan Dockerfile

Med Visual Studio 2022 17.9 och senare med .NET 7 SDK installerat kan du i ASP.NET Core-projekt som riktar sig mot .NET 6 eller senare använda .NET SDK:s inbyggda stöd för containerbyggen, vilket innebär att du inte behöver någon Dockerfile. se Containerize a .NET app with dotnet publish. I stället konfigurerar du dina containrar med hjälp av MSBuild-egenskaper i projektfilen, och inställningarna för att starta containrarna med Visual Studio kodas i en .json konfigurationsfil launchSettings.json.

Skärmbild som visar dialogrutan Alternativ för containerställningar för att lägga till Docker-stöd med .NET SDK valt som containerversionstyp.

Här väljer du .NET SDK som containerversionstyp för att använda .NET SDK:s containerhantering i stället för en Dockerfile.

Container Image Distro anger vilken OS-avbildning dina containrar använder som basavbildning. Den här listan ändras om du växlar mellan Linux och Windows som container. I föregående avsnitt finns en lista över tillgängliga bilder.

Kompileringsposten för .NET SDK-containern i launchSettings.json ser ut som följande kod:

"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 hanterar några av de inställningar som skulle ha kodats i en Dockerfile, till exempel containerbasavbildningen och de miljövariabler som ska anges. De inställningar som är tillgängliga i projektfilen för containerkonfiguration visas på Anpassa din container. Till exempel sparas Container Image Distro i projektfilen som egenskapen ContainerBaseImage. Du kan ändra den senare genom att redigera projektfilen.

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

Använda containersfönstret

Med fönstret Containers kan du visa containrar och bilder på datorn och se vad som händer med dem. Du kan visa filsystemet, volymer monterade, miljövariabler, portar som används och undersöka loggfiler.

Öppna fönstret Containers med snabbstarten (Ctrl+Q) och skriv containers. Du kan använda dockningskontrollerna för att placera fönstret någonstans. På grund av fönstrets bredd fungerar det bäst när det dockas längst ned på skärmen.

Välj en container och använd flikarna för att visa den information som är tillgänglig. Om du vill checka ut det kör du den Docker-aktiverade appen, öppnar fliken Files och expanderar mappen app för att se din distribuerade app i containern.

Skärmbild av fönstret Containers.

Skärmbild av fönstret Containers.

Mer information finns i Använd fönstret Containrar.

Stöd för Docker Compose

När du vill skapa en lösning för flera containrar med Docker Compose lägger du till stöd för containerorkestrering i dina projekt. På så sätt kan du köra och felsöka en grupp containrar (en hel lösning eller grupp med projekt) samtidigt om de definieras i samma docker-compose.yml fil.

Om du vill lägga till stöd för containerorkestrering med Docker Compose högerklickar du på projektnoden i Solution Exploreroch väljer Lägg till > Container Orchestrator Support. Välj sedan Docker Compose för att hantera containrarna.

När du har lagt till stöd för containerorkestrering i projektet visas en Dockerfile- som lagts till i projektet (om det inte redan fanns någon) och en docker-compose- mapp som lagts till i lösningen i Solution Explorer, som du ser här:

Skärmbild av Docker-filer i Solution Explorer i Visual Studio.

Skärmbild av Docker-filer i Solution Explorer i Visual Studio.

Om docker-compose.yml redan finns lägger Visual Studio bara till de nödvändiga raderna med konfigurationskod till den.

Upprepa processen med de andra projekt som du vill styra med Docker Compose.

Om du arbetar med ett stort antal tjänster kan du spara tid och beräkningsresurser genom att välja vilken delmängd av tjänster som du vill starta i felsökningssessionen. Se Starta en delmängd av Compose-tjänster.

Not

Observera att fjärranslutna Docker-värdar inte stöds i Visual Studio-verktyg.

Service Fabric-stöd

Med Service Fabric-verktyg i Visual Studio kan du utveckla och felsöka för Azure Service Fabric, köra och felsöka lokalt och distribuera till Azure.

Visual Studio 2019 och senare stöder utveckling av containerbaserade mikrotjänster med hjälp av Windows-containrar och Service Fabric-orkestrering.

För en detaljerad handledning, se Handledning: Implementera ett .NET-program i en Windows-container till Azure Service Fabric.

Mer information om Azure Service Fabric finns i Service Fabric.

Kontinuerlig leverans och kontinuerlig integrering (CI/CD)

Visual Studio integreras enkelt med Azure Pipelines för automatiserad och kontinuerlig integrering och leverans av ändringar i din tjänstkod och konfiguration. Kom igång genom att läsa Skapa din första pipeline.

För Service Fabric, se Självstudie: Distribuera din ASP.NET Core-app till Azure Service Fabric med hjälp av Azure DevOps Projects.

Nästa steg

Mer information om tjänsteimplementering och användning av Visual Studio-verktyg för att arbeta med containrar finns i följande artiklar:

Felsökning av appar i en lokal Docker-container

Distribuera en ASP.NET container till ett containerregister med hjälp av Visual Studio

Distribuera till Azure App Service

Distribuera till Azure Container Apps med Visual Studio