Přizpůsobení imagí kontejneru pro ladění
Poznámka:
Tato část popisuje, jak můžete kontejnery Dockeru přizpůsobit, když zvolíte typ sestavení kontejneru Dockerfile. Pokud používáte typ sestavení sady .NET SDK, možnosti přizpůsobení se liší a většina informací v této části se nedá použít. Místo toho si přečtěte téma Kontejnerizace aplikace .NET s publikováním dotnet.
Při sestavování v konfiguraci ladění existuje několik optimalizací, které Sada Visual Studio pomáhá s výkonem procesu sestavení pro kontejnerizované projekty. Proces sestavení pro kontejnerizované aplikace není tak jednoduchý, jako když jednoduše postupujete podle kroků uvedených v souboru Dockerfile. Sestavování v kontejneru je pomalejší než sestavování na místním počítači. Když tedy sestavíte konfiguraci ladění , Visual Studio ve skutečnosti sestaví projekty na místním počítači a pak sdílí výstupní složku do kontejneru pomocí připojení svazku. Sestavení s touto povolenou optimalizací se nazývá sestavení rychlého režimu.
V režimu Rychlé volání docker build
sady Visual Studio s argumentem, který Dockeru říká, že sestaví pouze první fázi v souboru Dockerfile (obvykle fázi base
). To můžete změnit nastavením MSBuild vlastnost , DockerfileFastModeStage
popsané v Kontejner Tools MSBuild vlastnosti. Visual Studio zpracovává zbytek procesu bez ohledu na obsah souboru Dockerfile. Při úpravě souboru Dockerfile, například přizpůsobení prostředí kontejneru nebo instalaci dalších závislostí, byste měli změny vložit do první fáze. Všechny vlastní kroky umístěné v souboru Dockerfile build
publish
nebo final
dílčí fáze se nespustí.
K této optimalizaci výkonu obvykle dochází pouze při sestavování v konfiguraci ladění . V konfiguraci vydané verze se sestavení vyskytuje v kontejneru, jak je uvedeno v souboru Dockerfile. Toto chování můžete pro konfiguraci vydané verze povolit nastavením ContainerDevelopmentMode
na Fast v souboru projektu:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<ContainerDevelopmentMode>Fast</ContainerDevelopmentMode>
</PropertyGroup>
Pokud chcete zakázat optimalizaci výkonu pro všechny konfigurace a sestavit jako Dockerfile určuje, pak nastavte Vlastnost ContainerDevelopmentMode na Regular v souboru projektu následujícím způsobem:
<PropertyGroup>
<ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
</PropertyGroup>
Pokud chcete obnovit optimalizaci výkonu, odeberte vlastnost ze souboru projektu.
Při spuštění ladění (F5) se dříve spuštěný kontejner znovu použije, pokud je to možné. Pokud nechcete předchozí kontejner znovu použít, můžete v sadě Visual Studio použít příkazy Znovu sestavit nebo vyčistit a vynutit tak, aby visual Studio používalo nový kontejner.
Proces spuštění ladicího programu závisí na typu projektu a kontejnerového operačního systému:
Scénář | Proces ladicího programu |
---|---|
Aplikace .NET Core (kontejnery Linuxu) | Visual Studio ho stáhne vsdbg a namapuje na kontejner, pak se zavolá pomocí programu a argumentů (tj dotnet webapp.dll . ) a pak se ladicí program připojí k procesu. |
Aplikace .NET Core (kontejnery Windows) | Visual Studio ho používá onecoremsvsmon a mapuje na kontejner, spustí ho jako vstupní bod a pak se k němu Visual Studio připojí a připojí se k programu. |
Aplikace .NET Framework | Visual Studio ho používá msvsmon a mapuje na kontejner, spouští ho jako součást vstupního bodu, kde se k němu Visual Studio může připojit a připojí se k programu. Podobá se tomu, jak byste normálně nastavili vzdálené ladění na jiném počítači nebo virtuálním počítači. |
Informace najdete vsdbg.exe
v tématu Offroad ladění .NET Core v Linuxu a OS X ze sady Visual Studio.
Úprava image kontejneru pro ladění a produkční prostředí
Pokud chcete upravit image kontejneru pro ladění i produkční prostředí, upravte base
fázi. Přidejte vlastní nastavení do souboru Dockerfile v oddílu základní fáze, obvykle první oddíl souboru Dockerfile. Informace o příkazech Dockerfile najdete v referenční dokumentaci k souboru Dockerfile.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# <add your commands here>
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication3/WebApplication3.csproj", "WebApplication3/"]
RUN dotnet restore "WebApplication3/WebApplication3.csproj"
COPY . .
WORKDIR "/src/WebApplication3"
RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication3.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", "WebApplication3.dll"]
Úprava image kontejneru pouze pro ladění
Kontejnery můžete přizpůsobit určitými způsoby, které vám pomůžou při ladění, například instalaci něčeho pro diagnostické účely, aniž by to mělo vliv na produkční buildy.
Pokud chcete upravit kontejner pouze pro ladění, vytvořte fázi a pak pomocí vlastnosti DockerfileFastModeStage
MSBuild dejte sadě Visual Studio vědět, aby při ladění používala přizpůsobenou fázi. Informace o příkazech Dockerfile najdete v referenční dokumentaci k souboru Dockerfile.
Poznámka:
Zde uvedené pokyny platí pro jednoúčelový případ. Stejný postup můžete provést také u více kontejnerů pomocí Docker Compose, ale techniky potřebné pro Docker Compose se mírně liší. Fáze je například řízena nastavením v dockercompose.debug.yml
souboru.
V následujícím příkladu nainstalujeme balíček procps-ng
, ale pouze v režimu ladění. Tento balíček poskytuje příkaz pidof
, který Sada Visual Studio vyžaduje (při cílení na .NET 5 a starší), ale není na obrázku Mariner použitém zde. Fáze, která používáme pro rychlé ladění režimu, je debug
vlastní fáze definovaná zde. Fáze rychlého režimu nemusí dědit z build
fáze nebo publish
fáze, protože base
Visual Studio připojí svazek, který obsahuje vše potřebné ke spuštění aplikace, jak je popsáno výše v tomto článku.
#See https://aka.ms/containerfastmode to understand 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:6.0-cbl-mariner2.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM base AS debug
RUN tdnf install procps-ng -y
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:6.0-cbl-mariner2.0 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
RUN dotnet publish "WebApplication1.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", "WebApplication1.dll"]
Do souboru projektu přidejte toto nastavení, abyste sadě Visual Studio řekli, aby při ladění používala vaši vlastní fázi debug
.
<PropertyGroup>
<!-- other property settings -->
<DockerfileFastModeStage>debug</DockerfileFastModeStage>
</PropertyGroup>
Přizpůsobení ladění imagí s nasazením AOT
Pro podporu nativního nasazení AOT se nainstaluje ladicí program GNU (GDB), ale pouze na imagi použitou při ladění, nikoli na finální bitovou kopii modulu runtime. Soubor Dockerfile obsahuje argument LAUNCHING_FROM_VS
sestavení, který může být true
nebo false
. Pokud true
se aotdebug
použije fáze, ve které se instaluje GDB. Všimněte si, že Visual Studio podporuje pouze nativní AOT a GDB pro linuxové kontejnery.
# These ARGs allow for swapping out the base used to make the final image when debugging from VS
ARG LAUNCHING_FROM_VS
# This sets the base image for final, but only if LAUNCHING_FROM_VS has been defined
ARG FINAL_BASE_IMAGE=${LAUNCHING_FROM_VS:+aotdebug}
# ... (other stages omitted)
# This stage is used as the base for the final stage when launching from VS to support debugging in regular mode (Default when not using the Debug configuration)
FROM base as aotdebug
USER root
# Install GDB to support native debugging
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
gdb
USER app
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM ${FINAL_BASE_IMAGE:-mcr.microsoft.com/dotnet/runtime-deps:8.0} AS final
WORKDIR /app
EXPOSE 8080
COPY --from=publish /app/publish .
ENTRYPOINT ["./WebApplication1"]
V souboru Dockerfile můžete aotstage
přizpůsobit image použitou v době ladění, aniž by to mělo vliv na konečnou image použitou při spuštění ze sady Visual Studio nebo v produkčním prostředí. Můžete například nainstalovat nástroj pro použití pouze při ladění.