Dela via


Lägga till stöd för containrar

Du kan lägga till stöd för Docker-containrar i Visual Studio-projekttyper som stöds, till exempel ASP.NET webbprojekt och andra. Se översikten för information om projekttyper som stöds i din version av Visual Studio.

Du kan lägga till stöd för Docker- eller Podman-containrar i Visual Studio-projekttyper som stöds, till exempel ASP.NET webbprojekt och andra. Se översikten för information om projekttyper som stöds i din version av Visual Studio.

Förutsättningar

Förutsättningar

Förutsättningar

Lägga till containerstöd när du skapar ett projekt

Du kan aktivera stöd för containrar när projektet skapas genom att välja Aktivera Docker-stöd 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.

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

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

Anmärkning

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

Anmärkning

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

Anmärkning

Om du använder den fullständiga .NET Framework-konsolprojektmallen är alternativet Lägg till stöd för Container Orchestrator när projektet har skapats, med alternativ för att använda Service Fabric eller Docker Compose. Det finns inga tillgängliga alternativ för att lägga till stöd vid projektskapande och Lägg till Docker-stöd för ett enskilt projekt utan orkestrering.

Anmärkning

Stöd för .NET Framework-containrar upphör i den aktuella versionen av Visual Studio. .NET Framework-containrar stöds fram till Visual Studio 2022 17.14.

Lägga till containerstöd i ett befintligt projekt

Du kan lägga till Docker-stöd i ett befintligt projekt genom att välja Lägg till>Docker-stöd i Solution Explorer. Kommandona Lägg till > Stöd för Docker och Lägg till > stöd för Container Orchestrator finns på snabbmenyn (eller snabbmenyn) för projektnoden för ett ASP.NET Core-projekt i Solution Explorer, som du ser i följande skärmbild:

Du kan lägga till Docker-stöd i ett befintligt projekt genom att välja Lägg till>containerstöd i Solution Explorer. Kommandona Lägg till > containerstöd och Lägg till > stöd för Container Orchestrator finns på snabbmenyn (eller snabbmenyn) för projektnoden för ett ASP.NET Core-projekt i Solution Explorer, som du ser på följande skärmbild:

Skärmbild som visar menyalternativet Lägg till Docker-support i Visual Studio.

Skärmbild som visar menyalternativet Lägg till containersupport 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 .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-Docker, och 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"]

Välj typ av containerbygge och andra alternativ

När du lägger till eller aktiverar containerstöd för 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.

Du kan också ange Container Image Distro och Container Byggkontext.

Skärmbild som visar dialogrutan Containerkonfigurationsalternativ för att lägga till containerstö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:

Linux:

  • Standard (Debian, men taggen matchar din .NET-målversion)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpin

Anmärkning

Containrar baserade på den mejslade Ubuntu-avbildningen och som använder Native Ahead-of-time (AOT)-distribution kan bara debuggas i snabbläge. Se Anpassa Docker-containrar i Visual Studio.

Container Build Context anger den mapp som används för docker build (eller podman build). Se Docker-byggkontext eller Podman-version. Standardinställningen är lösningsmappen, vilket rekommenderas. Alla filer som behövs för en version måste finnas under den här mappen, vilket inte är fallet om du väljer projektmappen eller någon annan mapp.

Byggtyp för Dockerfile-container

Om du väljer containerbyggtypen Dockerfile lä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-Docker, och du valde Linux-containrar:

# 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 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.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 "./WebApplication15-AddContainerSupport.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", "WebApplication15-AddContainerSupport.dll"]

.NET SDK-typ för containerbygge

Du kan använda .NET SDK:s inbyggda stöd för containerversioner, vilket innebär att du inte behöver någon Dockerfile. se Containerisera en .NET-app med 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 i Anpassa din container. Till exempel sparas Container Image Distro i projektfilen som ContainerBaseImage egenskap. Du kan ändra den senare genom att redigera projektfilen.

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

Välj typ av containerbygge och andra alternativ

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.

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

Skärmbild som visar dialogrutan Alternativ för containerställningar 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:

Linux:

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

Anmärkning

Containrar baserade på mejslade Ubuntu-avbilder och som använder AOT-distribution (Native Ahead-of-time) kan bara felsökas i Fast Mode. Se Anpassa Docker-containrar i Visual Studio.

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

Byggtyp för Dockerfile-container

Om du väljer containerbyggtypen Dockerfile lä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-Docker, och 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:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.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"]

.NET SDK-typ för containerbygge

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 Containerisera en .NET-app med 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 i Anpassa din container. Till exempel sparas Container Image Distro i projektfilen som ContainerBaseImage egenskap. Du kan ändra den senare genom att redigera projektfilen.

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

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:

Docker i Visual Studio

Felsöka appar i en lokal 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