Dela via


Visual Studio Container Tools med ASP.NET Core

Note

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Warning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Important

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Visual Studio 2017 eller senare versioner har stöd för att skapa, felsöka och köra containerbaserade ASP.NET Core-appar. Både Windows- och Linux-containrar stöds.

Visa eller ladda ned exempelkod (hur du laddar ned)

Prerequisites

Installation och konfiguration

För Docker-installation läser du först informationen i Docker för Windows: Vad du bör veta innan du installerar. Installera sedan Docker för Windows.

Delade diskar i Docker för Windows måste konfigureras för att stödja volymmappning och felsökning. Högerklicka på Docker-ikonen för systemfältet, välj Inställningar och välj Delade enheter. Välj den enhet där Docker lagrar filer. Klicka på Använd.

Dialogruta för att välja lokal C-enhetsdelning för containrar

Tip

Visual Studio 2017 version 15.6 eller senare frågar när delade enheter inte har konfigurerats.

Lägga till ett projekt i en Docker-container

När du lägger till Docker-stöd i ett projekt väljer du antingen en Windows- eller Linux-container. Docker-värddatorn måste köra samma typ av container. Om du vill ändra containertypen i den Docker-instans som körs högerklickar du på Docker-ikonen för systemfältet och väljer Växla till Windows-containrar... eller Växla till Linux-containrar....

Ny app

När du skapar en ny app med projektmallarna ASP.NET Core Web Application väljer du kryssrutan Aktivera Docker-support :

Kryssrutan aktivera Docker-support

I listrutan för operativsystemet kan du välja en containertyp.

Befintlig app

Det finns två alternativ för att lägga till Docker-stöd i ett befintligt projekt via verktygen. Öppna projektet i Visual Studio och välj något av följande alternativ:

  • Välj Docker-stödProjekt-menyn .
  • Högerklicka på projektet i Solution Explorer och välj Lägg till>Docker-support.

Visual Studio Container Tools har inte stöd för att lägga till Docker i ett befintligt ASP.NET Core-projekt som är inriktat på .NET Framework.

Översikt över Dockerfile

En Dockerfile, receptet för att skapa en slutlig Docker-avbildning, läggs till i projektroten. Se Dockerfile-referensen för att förstå kommandona i den. Den här dockerfile använder en flerstegsversion med fyra distinkta, namngivna byggfaser:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 AS base
WORKDIR /app
EXPOSE 59518
EXPOSE 44364

FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app

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

Föregående Dockerfile-avbildning innehåller paketen ASP.NET Core Runtime och NuGet. Paketen kompileras just-in-time (JIT) för att förbättra startprestanda.

När kryssrutan Konfigurera för HTTPS i den nya projektdialogrutan är markerad exponerar Dockerfile två portar. En port används för HTTP-trafik. den andra porten används för HTTPS. Om kryssrutan inte är markerad exponeras en enskild port (80) för HTTP-trafik.

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY HelloDockerTools/HelloDockerTools.csproj HelloDockerTools/
RUN dotnet restore HelloDockerTools/HelloDockerTools.csproj
COPY . .
WORKDIR /src/HelloDockerTools
RUN dotnet build HelloDockerTools.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish HelloDockerTools.csproj -c Release -o /app

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

Den aktuella Dockerfile-avbildningen innehåller ASP.NET Core NuGet-paket, som just-in-time (JIT) kompileras för att förbättra startprestanda.

Lägga till stöd för containerorkestrering i en app

Visual Studio 2017 version 15.7 eller tidigare stöder Docker Compose som den enda containerorkestreringslösningen. Docker Compose-artefakterna läggs till via Lägg till>Docker-support.

Visual Studio 2017 version 15.8 eller senare lägger till en orkestreringslösning endast när du uppmanas. Högerklicka på projektet i Solution Explorer och välj Lägg till>stöd för Container Orchestrator. Följande alternativ är tillgängliga:

Docker Compose

Visual Studio Container Tools lägger till ett docker-compose-projekt i lösningen med följande filer:

  • docker-compose.dcproj: Filen som representerar projektet. Innehåller ett <DockerTargetOS> element som anger vilket operativsystem som ska användas.
  • .dockerignore: Visar de fil- och katalogmönster som ska undantas när du genererar en byggkontext.
  • docker-compose.yml: Den grundläggande Docker Compose-filen som används för att definiera samlingen av avbildningar som respektive byggs och körs med docker-compose build och docker-compose run.
  • docker-compose.override.yml: En valfri fil som läses av Docker Compose, med konfigurationsåtsidosättningar för tjänster. Visual Studio utför docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" för att sammanfoga dessa filer.

Filen docker-compose.yml refererar till namnet på avbildningen som skapas när projektet körs:

version: '3.4'

services:
  hellodockertools:
    image: ${DOCKER_REGISTRY}hellodockertools
    build:
      context: .
      dockerfile: HelloDockerTools/Dockerfile

I föregående exempel image: hellodockertools genererar bilden hellodockertools:dev när appen körs i felsökningsläge . Bilden hellodockertools:latest genereras när appen körs i releaseläge.

Prefixa avbildningsnamnet med Docker Hub-användarnamnet (till exempel dockerhubusername/hellodockertools) om avbildningen skickas till registret. Alternativt kan du ändra avbildningsnamnet så att det innehåller url:en för det privata registret (till exempel privateregistry.domain.com/hellodockertools) beroende på konfigurationen.

Om du vill ha ett annat beteende baserat på byggkonfigurationen (till exempel Felsökning eller Version) lägger du till konfigurationsspecifika docker-compose-filer . Filerna ska namnges enligt byggkonfigurationen (till exempel docker-compose.vs.debug.yml och docker-compose.vs.release.yml) och placeras på samma plats som den docker-compose-override.yml filen.

Med hjälp av de konfigurationsspecifika åsidosättningsfilerna kan du ange olika konfigurationsinställningar (till exempel miljövariabler eller startpunkter) för felsöknings- och versionsversionskonfigurationer.

För att Docker Compose ska kunna visa ett alternativ som ska köras i Visual Studio måste docker-projektet vara startprojektet.

Service Fabric

Förutom grundkraven kräver Service Fabric-orkestreringslösningen följande krav:

Service Fabric stöder inte körning av Linux-containrar i det lokala utvecklingsklustret i Windows. Om projektet redan använder en Linux-container uppmanas Visual Studio att växla till Windows-containrar.

Visual Studio Container Tools utför följande uppgifter:

  • Lägger till ett <project_name>ApplicationService Fabric-programprojekt i lösningen.

  • Lägger till en Dockerfile och en .dockerignore-fil i ASP.NET Core-projektet. Om det redan finns en Dockerfile i ASP.NET Core-projektet byter den namn till Dockerfile.original. En ny Dockerfile, som liknar följande, skapas:

    # See https://aka.ms/containerimagehelp for information on how to use Windows Server 1709 containers with Service Fabric.
    # FROM microsoft/aspnetcore:2.0-nanoserver-1709
    FROM microsoft/aspnetcore:2.0-nanoserver-sac2016
    ARG source
    WORKDIR /app
    COPY ${source:-obj/Docker/publish} .
    ENTRYPOINT ["dotnet", "HelloDockerTools.dll"]
    
  • Lägger till ett <IsServiceFabricServiceProject> element i ASP.NET Core-projektets .csproj fil:

    <IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
    
  • Lägger till en PackageRoot-mapp i projektet ASP.NET Core. Mappen innehåller tjänstmanifestet och inställningarna för den nya tjänsten.

Mer information finns i Distribuera en .NET-app i en Windows-container till Azure Service Fabric.

Debug

Välj Docker i listrutan felsökning i verktygsfältet och börja felsöka appen. Docker-vyn i utdatafönstret visar följande åtgärder som utförs:

  • Taggen 2.1-aspnetcore-runtime för microsoft/dotnet-körningsavbildningen hämtas (om den inte redan finns i cacheminnet). Avbildningen installerar ASP.NET Core- och .NET-körtider samt associerade bibliotek. Den är optimerad för att köra ASP.NET Core-appar i produktion.
  • Miljövariabeln ASPNETCORE_ENVIRONMENT är inställd till Development i containern.
  • Två dynamiskt tilldelade portar exponeras: en för HTTP och en för HTTPS. Porten som tilldelats localhost kan efterfrågas med docker ps kommandot .
  • Appen kopieras till containern.
  • Standardwebbläsaren startas med det felsökningsprogram som är kopplat till containern med hjälp av den dynamiskt tilldelade porten.

Den resulterande Docker-avbildningen av appen taggas som dev. Avbildningen baseras på taggen 2.1-aspnetcore-runtime för basavbildningen microsoft/dotnet . docker images Kör kommandot i fönstret Package Manager Console (PMC). Bilderna på datorn visas:

REPOSITORY        TAG                     IMAGE ID      CREATED         SIZE
hellodockertools  dev                     d72ce0f1dfe7  30 seconds ago  255MB
microsoft/dotnet  2.1-aspnetcore-runtime  fcc3887985bb  6 days ago      255MB
  • Körningsavbildningen microsoft/aspnetcore hämtas (om den inte redan finns i cacheminnet).
  • Miljövariabeln ASPNETCORE_ENVIRONMENT är inställd till Development i containern.
  • Port 80 exponeras och mappas till en dynamiskt tilldelad port för localhost. Porten bestäms av Docker-värden och kan kontrolleras med docker ps kommandot.
  • Appen kopieras till containern.
  • Standardwebbläsaren startas med det felsökningsprogram som är kopplat till containern med hjälp av den dynamiskt tilldelade porten.

Den resulterande Docker-avbildningen av appen taggas som dev. Avbildningen baseras på basavbildningen microsoft/aspnetcore . docker images Kör kommandot i fönstret Package Manager Console (PMC). Bilderna på datorn visas:

REPOSITORY            TAG  IMAGE ID      CREATED        SIZE
hellodockertools      dev  5fafe5d1ad5b  4 minutes ago  347MB
microsoft/aspnetcore  2.0  c69d39472da9  13 days ago    347MB

Note

Dev-avbildningen saknar appinnehållet eftersom felsökningskonfigurationer använder volymmontering för att ge den iterativa upplevelsen. För att pusha en avbildning använder du Release-konfigurationen.

docker ps Kör kommandot i PMC. Observera att appen körs med containern:

CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS              PORTS                   NAMES
baf9a678c88d        hellodockertools:dev   "C:\\remote_debugge..."   21 seconds ago      Up 19 seconds       0.0.0.0:37630->80/tcp   dockercompose4642749010770307127_hellodockertools_1

Redigera och fortsätt

Ändringar av statiska filer och Razor vyer uppdateras automatiskt utan behov av ett kompileringssteg. Gör ändringen, spara och uppdatera webbläsaren för att visa uppdateringen.

Kodfiländringar kräver kompilering och omstart av Kestrel i containern. När du har gjort ändringen använder du CTRL+F5 för att utföra processen och starta appen i containern. Docker-containern återskapas inte eller stoppas inte. docker ps Kör kommandot i PMC. Observera att den ursprungliga containern fortfarande körs sedan 10 minuter tillbaka.

CONTAINER ID        IMAGE                  COMMAND                   CREATED             STATUS              PORTS                   NAMES
baf9a678c88d        hellodockertools:dev   "C:\\remote_debugge..."   10 minutes ago      Up 10 minutes       0.0.0.0:37630->80/tcp   dockercompose4642749010770307127_hellodockertools_1

Publicera Docker-avbildningar

När appens utvecklings- och felsökningscykel har slutförts hjälper Visual Studio Container Tools till att skapa produktionsavbildningen av appen. Ändra konfigurationslistrutan till Släpp och skapa appen. Verktyget hämtar kompilerings-/publiceringsbilden från Docker Hub (om den inte redan finns i cacheminnet). En avbildning skapas med den senaste taggen, som kan skickas till det privata registret eller Docker Hub.

docker images Kör kommandot i PMC för att se listan över bilder. Utdata som liknar följande visas:

REPOSITORY        TAG                     IMAGE ID      CREATED             SIZE
hellodockertools  latest                  e3984a64230c  About a minute ago  258MB
hellodockertools  dev                     d72ce0f1dfe7  4 minutes ago       255MB
microsoft/dotnet  2.1-sdk                 9e243db15f91  6 days ago          1.7GB
microsoft/dotnet  2.1-aspnetcore-runtime  fcc3887985bb  6 days ago          255MB
REPOSITORY                  TAG     IMAGE ID      CREATED         SIZE
hellodockertools            latest  cd28f0d4abbd  12 seconds ago  349MB
hellodockertools            dev     5fafe5d1ad5b  23 minutes ago  347MB
microsoft/aspnetcore-build  2.0     7fed40fbb647  13 days ago     2.02GB
microsoft/aspnetcore        2.0     c69d39472da9  13 days ago     347MB

Bilderna microsoft/aspnetcore-build och microsoft/aspnetcore som anges i föregående utdata har ersatts med microsoft/dotnet-bilder från och med .NET Core 2.1. Mer information finns i migreringsmeddelandet för Docker-lagringsplatser.

Note

Kommandot docker images returnerar mellanliggande avbildningar med lagringsplatsnamn och taggar identifierade som <inga> (visas inte ovan). Dessa namnlösa avbildningar skapas av Dockerfileför flera steg. De förbättrar effektiviteten i att skapa den slutliga avbildningen – endast de nödvändiga lagren återskapas när ändringar sker. När mellanliggande avbildningar inte längre behövs tar du bort dem med kommandot docker rmi .

Det kan finnas en förväntan på att produktions- eller releasavbildningen ska vara mindre i storlek jämfört med utvecklingsavbildningen. På grund av volymmappningen kördes felsökaren och appen från den lokala datorn och inte i containern. Den senaste avbildningen har paketerat den appkod som krävs för att köra appen på en värddator. Därför är deltat storleken på appkoden.

Ytterligare resurser