Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Belangrijk
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikel voor de huidige release.
Visual Studio 2017 of nieuwere versies ondersteunen het bouwen, opsporen van fouten en het uitvoeren van container-ASP.NET Core-apps die gericht zijn op .NET Core. Zowel Windows- als Linux-containers worden ondersteund.
Voorbeeldcode bekijken of downloaden (hoe download je)
Vereiste voorwaarden
- Docker voor Windows
- Visual Studio 2019 met de platformoverschrijdende ontwikkelworkload van .NET Core
Installatie en configuratie
Lees voor de installatie van Docker eerst de informatie in Docker voor Windows: wat u moet weten voordat u installeert. Installeer vervolgens Docker voor Windows.
Gedeelde schijven in Docker voor Windows moeten worden geconfigureerd om volumetoewijzing en foutopsporing te ondersteunen. Klik met de rechtermuisknop op het Docker-pictogram van het systeemvak, selecteer Instellingen en selecteer Gedeelde stations. Selecteer het station waarin Docker bestanden opslaat. Klik op Toepassen.
Aanbeveling
Visual Studio 2017 versies 15.6 of hoger waarschuwen wanneer gedeelde stations niet zijn geconfigureerd.
Een project toevoegen aan een Docker-container
Als u een ASP.NET Core-project wilt containeriseren, moet het project zich richten op .NET Core. Linux- en Windows-containers worden ondersteund.
Wanneer u Docker-ondersteuning toevoegt aan een project, kiest u een Windows- of Linux-container. Op de Docker-host moet hetzelfde containertype worden uitgevoerd. Als u het containertype in het actieve Docker-exemplaar wilt wijzigen, klikt u met de rechtermuisknop op het Docker-pictogram van het systeemvak en kiest u Overschakelen naar Windows-containers... of overschakelen naar Linux-containers....
Nieuwe app
Wanneer u een nieuwe app maakt met de ASP.NET Core Web Application-projectsjablonen , schakelt u het selectievakje Docker-ondersteuning inschakelen in:
Als het doelframework .NET Core is, kan in de vervolgkeuzelijst van het besturingssysteem een containertype worden geselecteerd.
Bestaande app
Voor ASP.NET Core-projecten die gericht zijn op .NET Core, zijn er twee opties voor het toevoegen van Docker-ondersteuning via de hulpprogramma's. Open het project in Visual Studio en kies een van de volgende opties:
- Selecteer Docker-ondersteuning in het menu Project .
- Klik met de rechtermuisknop op het project in Solution Explorer en selecteerDocker-ondersteuning>.
Visual Studio Container Tools biedt geen ondersteuning voor het toevoegen van Docker aan een bestaand ASP.NET Core-project dat gericht is op .NET Framework.
Overzicht van Dockerfile
Een Dockerfile, het recept voor het maken van een definitieve Docker-image, wordt toegevoegd aan de root van het project. Raadpleeg dockerfile-naslaginformatie voor een goed begrip van de opdrachten erin. In dit specifieke Dockerfile wordt een build met meerdere fasen gebruikt met vier afzonderlijke, benoemde buildfasen:
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"]
De voorgaande Dockerfile-installatiekopieën bevatten de ASP.NET Core-runtime en NuGet-pakketten. De pakketten zijn Just-In-Time (JIT) gecompileerd om de opstartprestaties te verbeteren.
Wanneer het selectievakje Configureren voor HTTPS van het nieuwe projectdialoogvenster is ingeschakeld, worden in het Dockerfile twee poorten weergegeven. Eén poort wordt gebruikt voor HTTP-verkeer; de andere poort wordt gebruikt voor HTTPS. Als het selectievakje niet is ingeschakeld, wordt één poort (80) weergegeven voor HTTP-verkeer.
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"]
De voorgaande Dockerfile-installatiekopieën bevatten de ASP.NET Core NuGet-pakketten, die just-in-time (JIT) zijn gecompileerd om de opstartprestaties te verbeteren.
Ondersteuning voor containerorchestrator toevoegen aan een app
Visual Studio 2017-versies 15.7 of eerder ondersteunen Docker Compose als de enige oplossing voor containerindeling. De Docker Compose-artefacten worden toegevoegd viaDocker-ondersteuning>.
Visual Studio 2017-versies 15.8 of hoger voegen alleen een orkestratieoplossing toe op instructie. Klik met de rechtermuisknop op het project in Solution Explorer en selecteerContainer Orchestrator-ondersteuning>. De volgende opties zijn beschikbaar:
Docker Compose
Visual Studio Container Tools voegt een docker-compose-project toe aan de oplossing met de volgende bestanden:
-
docker-compose.dcproj: het bestand dat het project vertegenwoordigt. Bevat een
<DockerTargetOS>
element dat het besturingssysteem opgeeft dat moet worden gebruikt. - .dockerignore: toont de bestands- en mappatronen die moeten worden uitgesloten bij het genereren van een buildcontext.
-
docker-compose.yml: Het hoofdbestand van Docker Compose dat wordt gebruikt om de verzameling afbeeldingen te definiëren die met
docker-compose build
respectievelijk metdocker-compose run
worden gebouwd en uitgevoerd. -
docker-compose.override.yml: Een optioneel bestand, gelezen door Docker Compose, met configuratieoverschrijvingen voor services. Visual Studio voert
docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml"
uit om deze bestanden samen te voegen.
Het docker-compose.yml-bestand verwijst naar de naam van de image die wordt aangemaakt wanneer het project wordt uitgevoerd.
version: '3.4'
services:
hellodockertools:
image: ${DOCKER_REGISTRY}hellodockertools
build:
context: .
dockerfile: HelloDockerTools/Dockerfile
In het voorgaande voorbeeld image: hellodockertools
wordt de afbeelding hellodockertools:dev
gegenereerd wanneer de app wordt uitgevoerd in de foutopsporingsmodus . De hellodockertools:latest
afbeelding wordt gegenereerd wanneer de app wordt uitgevoerd in Releasemodus.
Voorzie de naam van de afbeelding van het voorvoegsel van de Docker Hub-gebruikersnaam (bijvoorbeeld dockerhubusername/hellodockertools
) als de afbeelding naar het register wordt gepusht. Alternatief kunt u de naam van de afbeelding wijzigen om de privéregister-URL (bijvoorbeeld privateregistry.domain.com/hellodockertools
) op te nemen, afhankelijk van de configuratie.
Als u ander gedrag wilt op basis van de buildconfiguratie (bijvoorbeeld Fouten opsporen of vrijgeven), voegt u configuratiespecifieke docker-compose-bestanden toe. De bestanden moeten worden benoemd volgens de buildconfiguratie (bijvoorbeeld docker-compose.vs.debug.yml en docker-compose.vs.release.yml) en op dezelfde locatie worden geplaatst als het docker-compose-override.yml-bestand .
Met behulp van de configuratiespecifieke overschrijfbestanden kunt u verschillende configuratie-instellingen (zoals omgevingsvariabelen of toegangspunten) opgeven voor debug- en release-build-configuraties.
Als Docker Compose een optie voor uitvoering in Visual Studio weergeeft, moet het docker-project het opstartproject zijn.
Service Fabric
Naast de basisvereisten vereist de Service Fabric-indelingsoplossing de volgende vereisten:
- Microsoft Azure Service Fabric SDK versie 2.6 of hoger
- Visual Studio's Azure-ontwikkelingsworkload
Service Fabric biedt geen ondersteuning voor het uitvoeren van Linux-containers in het lokale ontwikkelcluster in Windows. Als het project al een Linux-container gebruikt, wordt in Visual Studio gevraagd om over te schakelen naar Windows-containers.
De Visual Studio Container Tools voeren de volgende taken uit:
Hiermee voegt u een <project_name>ApplicationService Fabric-toepassingsproject toe aan de oplossing.
Hiermee voegt u een Dockerfile en een .dockerignore-bestand toe aan het ASP.NET Core-project. Als er al een Dockerfile bestaat in het ASP.NET Core-project, wordt de naam gewijzigd in Dockerfile.original. Er wordt een nieuw Dockerfile gemaakt dat er ongeveer als volgt uitziet:
# 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"]
Voegt een
<IsServiceFabricServiceProject>
element toe aan het bestand van.csproj
het ASP.NET Core-project:<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
Hiermee voegt u een PackageRoot-map toe aan het ASP.NET Core-project. De map bevat het servicemanifest en de instellingen voor de nieuwe service.
Zie Een .NET-app implementeren in een Windows-container naar Azure Service Fabric voor meer informatie.
Fouten opsporen
Selecteer Docker in de vervolgkeuzelijst voor foutopsporing in de werkbalk en start de foutopsporing van de app. In de Docker-weergave van het uitvoervenster ziet u de volgende acties die worden uitgevoerd:
- De 2.1-aspnetcore-runtime tag van de microsoft/dotnet runtime-image wordt verkregen (als deze nog niet in de cache staat). Het image installeert de ASP.NET Core- en .NET Core-runtimes en de bijbehorende bibliotheken. Het is geoptimaliseerd voor het uitvoeren van ASP.NET Core-apps in productie.
- De
ASPNETCORE_ENVIRONMENT
omgevingsvariabele wordt ingesteld opDevelopment
binnen de container. - Er worden twee dynamisch toegewezen poorten weergegeven: één voor HTTP en één voor HTTPS. Met de opdracht kan een query worden uitgevoerd op de
docker ps
poort die is toegewezen aan localhost. - De app wordt gekopieerd naar de container.
- De standaardbrowser wordt gestart met het foutopsporingsprogramma dat is gekoppeld aan de container met behulp van de dynamisch toegewezen poort.
De resulterende Docker-image van de app wordt getagd als dev. De image is gebaseerd op de 2.1-aspnetcore-runtime tag van de microsoft/dotnet basisimage. Voer de docker images
opdracht uit in het venster Package Manager Console (PMC). De afbeeldingen op de machine worden weergegeven.
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev d72ce0f1dfe7 30 seconds ago 255MB
microsoft/dotnet 2.1-aspnetcore-runtime fcc3887985bb 6 days ago 255MB
- De microsoft/aspnetcore runtime image wordt gedownload indien deze nog niet in de cache aanwezig is.
- De
ASPNETCORE_ENVIRONMENT
omgevingsvariabele wordt ingesteld opDevelopment
binnen de container. - Poort 80 wordt weergegeven en toegewezen aan een dynamisch toegewezen poort voor localhost. De poort wordt bepaald door de Docker-host en kan worden opgevraagd met de
docker ps
opdracht. - De app wordt gekopieerd naar de container.
- De standaardbrowser wordt gestart met het foutopsporingsprogramma dat is gekoppeld aan de container met behulp van de dynamisch toegewezen poort.
De resulterende Docker-image van de app wordt getagd als dev. De afbeelding is gebaseerd op de microsoft/aspnetcore basisafbeelding. Voer de docker images
opdracht uit in het venster Package Manager Console (PMC). De afbeeldingen op de machine worden weergegeven.
REPOSITORY TAG IMAGE ID CREATED SIZE
hellodockertools dev 5fafe5d1ad5b 4 minutes ago 347MB
microsoft/aspnetcore 2.0 c69d39472da9 13 days ago 347MB
Opmerking
De dev-image mist de inhoud van de app, omdat Debug-configuraties volumekoppeling gebruiken om de iteratieve ervaring te bieden. Als u een image wilt pushen, gebruikt u de Release configuratie.
Voer de docker ps
opdracht uit in PMC. U ziet dat de app wordt uitgevoerd met behulp van de container:
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
Bewerken en doorgaan
Wijzigingen in statische bestanden en Razor weergaven worden automatisch bijgewerkt zonder dat er een compilatiestap nodig is. Breng de wijziging aan, sla deze op en vernieuw de browser om de update weer te geven.
Wijzigingen in codebestanden vereisen compilatie en opnieuw opstarten binnen Kestrel de container. Nadat u de wijziging hebt aangebracht, gebruikt CTRL+F5
u om het proces uit te voeren en de app in de container te starten. De Docker-container wordt niet opnieuw opgebouwd of gestopt. Voer de docker ps
opdracht uit in PMC. U ziet dat de oorspronkelijke container al 10 minuten draait.
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
Docker-installatiekopieën publiceren
Zodra de ontwikkel- en foutopsporingscyclus van de app is voltooid, helpen de Visual Studio Container Tools bij het maken van de productie-installatiekopieën van de app. Wijzig de configuratie-vervolgkeuzelijst naar Release en build de app. Het hulpprogramma haalt de compileer/publiceer-afbeelding op van Docker Hub (als deze nog niet in de cache aanwezig is). Er wordt een afbeelding geproduceerd met de meest recente tag, die naar het privéregister of Docker Hub kan worden geüpload.
Voer de docker images
opdracht uit in PMC om de lijst met afbeeldingen weer te geven. Uitvoer die lijkt op het volgende wordt weergegeven:
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
De microsoft/aspnetcore-build
- en microsoft/aspnetcore
-afbeeldingen die in de voorgaande uitvoer worden vermeld, worden vanaf .NET Core 2.1 vervangen door microsoft/dotnet
-afbeeldingen. Zie de migratieaankondiging voor Docker-opslagplaatsen voor meer informatie.
Opmerking
De docker images
opdracht retourneert tussenliggende afbeeldingen met opslagplaatsnamen en tags die zijn geïdentificeerd als <none> (hierboven niet vermeld). Deze niet-benoemde installatiekopieën worden geproduceerd door de Dockerfilemet meerdere fasen. Ze verhogen de efficiëntie bij het opbouwen van de uiteindelijke afbeelding. Alleen de noodzakelijke lagen worden opnieuw opgebouwd wanneer er wijzigingen optreden. Wanneer de tussenliggende afbeeldingen niet meer nodig zijn, verwijder ze dan met de docker rmi-opdracht.
Het wordt verwacht dat de productie- of release-afbeeldingen kleiner zijn dan de ontwikkelafbeeldingen. Vanwege de volumetoewijzing werden het foutopsporingsprogramma en de app uitgevoerd vanaf de lokale computer en niet binnen de container. De meest recente installatiekopie heeft de benodigde app-code verpakt om de app uit te voeren op een hostcomputer. Daarom is de delta de grootte van de app-code.
Aanvullende bronnen
- Containerontwikkeling met Visual Studio
- Azure Service Fabric: uw ontwikkelomgeving voorbereiden
- Een .NET-app in een Windows-container implementeren in Azure Service Fabric
- Problemen met Visual Studio-ontwikkeling oplossen met Docker
- GitHub-opslagplaats voor Visual Studio Container Tools
- GC met Docker en kleine containers
- System.IO.IOException: De geconfigureerde gebruikerslimiet (128) op het aantal inotify-exemplaren is bereikt
- Updates voor Docker-installatiekopieën