Delen via


Docker-containers aanpassen in Visual Studio

U kunt uw containerinstallatiekopieën aanpassen door het Dockerfile te bewerken dat Visual Studio genereert wanneer u Docker-ondersteuning toevoegt aan uw project. Of u nu een aangepaste container bouwt vanuit de Visual Studio IDE of een opdrachtregelbuild instelt, u moet weten hoe Visual Studio de Dockerfile gebruikt om uw projecten te bouwen. U moet dergelijke details weten, omdat Visual Studio om prestatieredenen een speciaal proces volgt voor het bouwen en uitvoeren van in containers geplaatste apps die niet duidelijk zijn uit het Dockerfile.

Stel dat u een wijziging wilt aanbrengen in het Dockerfile en de resultaten wilt zien in zowel foutopsporing als in productiecontainers. In dat geval kunt u opdrachten toevoegen in het Dockerfile om de eerste fase te wijzigen (meestal base). Bekijk De containerafbeelding wijzigen voor foutopsporing en productie. Maar als u alleen een wijziging wilt aanbrengen bij foutopsporing, maar niet bij productie, moet u een andere fase maken en de DockerfileFastModeStage build-instelling gebruiken om Visual Studio te laten weten dat deze fase moet worden gebruikt voor foutopsporingsbuilds. Zie De containerafbeelding alleen wijzigen voor foutopsporing.

In dit artikel wordt het buildproces van Visual Studio voor in containers geplaatste apps in detail uitgelegd. Het bevat vervolgens informatie over het wijzigen van het Dockerfile om invloed te hebben op zowel foutopsporing als productiebuilds, of alleen voor foutopsporing.

Dockerfile builds in Visual Studio

Notitie

In deze sectie wordt het containerbuildproces beschreven dat Visual Studio gebruikt wanneer u het buildtype Dockerfile-container kiest. Als u het buildtype .NET SDK gebruikt, zijn de aanpassingsopties anders en zijn de informatie in deze sectie niet van toepassing. Zie in plaats daarvan Een .NET-app containeriseren met dotnet publiceren en de eigenschappen gebruiken die worden beschreven in Uw container aanpassen om het containerbuildproces te configureren.

Build met meerdere fases

Wanneer Visual Studio een project bouwt dat geen Docker-containers gebruikt, wordt MSBuild aangeroepen op de lokale computer en worden de uitvoerbestanden gegenereerd in een map (meestal bin) onder uw lokale oplossingsmap. Voor een containerproject houdt het buildproces echter rekening met de instructies van het Dockerfile voor het bouwen van de container-app. Het Dockerfile dat Visual Studio gebruikt, is onderverdeeld in meerdere fasen. Dit proces is afhankelijk van de multistage-buildfunctie van Docker.

De functie voor build met meerdere fases helpt het proces van het bouwen van containers efficiënter te maken en maakt containers kleiner doordat ze alleen de bits bevatten die uw app tijdens runtime nodig heeft. Build met meerdere fases wordt gebruikt voor .NET Core-projecten, niet voor .NET Framework-projecten.

Met de build met meerdere fasen kunnen containerafbeeldingen worden gemaakt in fasen die tussentijdse afbeeldingen opleveren. Denk bijvoorbeeld aan een typisch Dockerfile. De eerste fase wordt base genoemd in het Dockerfile dat Door Visual Studio wordt gegenereerd, hoewel deze naam niet is vereist voor de hulpprogramma's.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

De regels in de Dockerfile beginnen met de ASP.NET-image van Microsoft Container Registry (mcr.microsoft.com) en maken een tussenliggende image base die poorten 80 en 443 openstelt en de werkmap instelt op /app.

De volgende fase is build, die als volgt wordt weergegeven:

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:3.1-buster-slim AS build
WORKDIR /src
COPY ["WebApplication43/WebApplication43.csproj", "WebApplication43/"]
RUN dotnet restore "WebApplication43/WebApplication43.csproj"
COPY . .
WORKDIR "/src/WebApplication43"
RUN dotnet build "WebApplication43.csproj" -c Release -o /app/build

U kunt zien dat de build-fase begint vanaf een andere oorspronkelijke afbeelding uit het register (sdk in plaats van aspnet), in plaats van vanaf de basisafbeelding voort te gaan. De sdk-installatiekopieën hebben alle buildhulpprogramma's en daarom is deze veel groter dan de aspnet-installatiekopieën, die alleen runtime-onderdelen bevatten. De reden voor het gebruik van een aparte image wordt duidelijk wanneer u de rest van het Dockerfile bekijkt.

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication43.csproj" -c Release -o /app/publish

# 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", "WebApplication43.dll"]

De laatste fase begint opnieuw vanaf baseen bevat de COPY --from=publish om de gepubliceerde uitvoer naar de uiteindelijke afbeelding te kopiëren. Dit proces maakt het mogelijk om de uiteindelijke installatiekopieën veel kleiner te maken, omdat het niet alle buildhulpprogramma's hoeft op te nemen die zich in de sdk installatiekopieën bevinden.

De volgende tabel bevat een overzicht van de fasen die worden gebruikt in de typische Dockerfile die door Visual Studio is gemaakt:

Podium Beschrijving
basis Hiermee maakt u de basisruntime-installatiekopie waarin de gebouwde app wordt gepubliceerd. Instellingen die tijdens runtime beschikbaar moeten zijn, gaan hierheen, zoals poorten en omgevingsvariabelen. Deze fase wordt gebruikt bij uitvoering vanuit VS in de snelle modus (standaard voor foutopsporingsconfiguratie).
bouwen Het project is gebouwd in deze fase. De .NET SDK-basisinstallatiekopie wordt gebruikt, die de onderdelen bevat die nodig zijn om uw project te bouwen.
publiceren Deze fase is afgeleid van de buildfase en publiceert uw project, dat wordt gekopieerd naar de laatste fase.
laatste In deze fase wordt geconfigureerd hoe u de app start en wordt gebruikt in productie of bij uitvoering vanuit VS in de normale modus (standaard wanneer u de foutopsporingsconfiguratie niet gebruikt).
aotdebug Deze fase wordt gebruikt als basis voor de laatste fase bij het starten vanuit VS ter ondersteuning van foutopsporing in de normale modus (standaard als u de foutopsporingsconfiguratie niet gebruikt).

Notitie

De aotdebug fase wordt alleen ondersteund voor Linux-containers. Het wordt gebruikt in Visual Studio 2022 17.11 en hoger als systeemeigen implementatie vooraf (AOT) is ingeschakeld voor het project.

Projectvoorbereiding

project opwarmen verwijst naar een reeks stappen die optreden wanneer het Docker-profiel wordt geselecteerd voor een project (dat wil gezegd, wanneer een project wordt geladen of Docker-ondersteuning wordt toegevoegd) om de prestaties van volgende uitvoeringen te verbeteren (F5- of Ctrl+F5). Dit gedrag kan worden geconfigureerd onder Tools>Options>Container Tools. Dit zijn de taken die op de achtergrond worden uitgevoerd:

  • Controleer of Docker Desktop is geïnstalleerd en actief is.
  • Zorg ervoor dat Docker Desktop is ingesteld op hetzelfde besturingssysteem als het project.
  • Haal de images op in de eerste fase van de Dockerfile (de base fase in de meeste Dockerfiles).
  • Bouw het Dockerfile en start de container.

Opwarmen vindt alleen plaats in Fast--modus, dus de actieve container heeft de app mapvolume gekoppeld. Dit betekent dat wijzigingen in de app de container niet ongeldig maken. Dit gedrag verbetert de debugprestaties aanzienlijk en vermindert de wachttijd voor langlopende taken, zoals het ophalen van grote software-afbeeldingen.

Gedetailleerde logboeken voor containerhulpprogramma's inschakelen

Voor diagnostische doeleinden kunt u bepaalde Logboeken van Container Tools inschakelen. U kunt deze logboeken inschakelen door bepaalde omgevingsvariabelen in te stellen. Voor projecten met één container is de omgevingsvariabele MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLED, die zich vervolgens aanmeldt bij %tmp%\Microsoft.VisualStudio.Containers.Tools. Voor Docker Compose-projecten is het MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, die zich vervolgens aanmeldt bij %tmp%\Microsoft.VisualStudio.DockerCompose.Tools.

Waarschuwing

Wanneer logboekregistratie is ingeschakeld en u een tokenproxy gebruikt voor Azure-verificatie, kunnen verificatiereferenties worden vastgelegd als tekst zonder opmaak. Zie Azure-verificatie configureren.

Volgende stappen

Meer informatie over het gebruik van de Dockerfile-fasen om de installatiekopieën die worden gebruikt voor foutopsporing en productie aan te passen, bijvoorbeeld hoe u een hulpprogramma alleen op de installatiekopieën installeert wanneer u fouten opspoort. Zie Containerafbeeldingen configureren voor foutopsporing.