Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- Docker för Windows
- Visual Studio 2019 med .NET Core plattformsoberoende utveckling arbetsbelastning
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.
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 :
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öd på Projekt-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 buildochdocker-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:
- Microsoft Azure Service Fabric SDK version 2.6 eller senare
- Arbetsbelastningen Azure-utveckling i Visual Studio
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.csprojfil:<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 tillDevelopmenti containern. - Två dynamiskt tilldelade portar exponeras: en för HTTP och en för HTTPS. Porten som tilldelats localhost kan efterfrågas med
docker pskommandot . - 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 tillDevelopmenti 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 pskommandot. - 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
- Containerutveckling med Visual Studio
- Azure Service Fabric: Förbered utvecklingsmiljön
- Distribuera en .NET-app i en Windows-container till Azure Service Fabric
- Felsöka Visual Studio-utveckling med Docker
- GitHub-lagringsplats för Visual Studio Container Tools
- GC med Docker och små containrar
- System.IO.IOException: Den konfigurerade användargränsen (128) för antalet inotify-instanser har nåtts
- Uppdateringar av Docker-avbildningar
ASP.NET Core