Přizpůsobení kontejnerů Dockeru v sadě Visual Studio

Image kontejneru můžete přizpůsobit úpravou souboru Dockerfile, který Visual Studio vygeneruje, když do projektu přidáte podporu Dockeru. Bez ohledu na to, jestli vytváříte přizpůsobený kontejner z integrovaného vývojového prostředí sady Visual Studio nebo nastavujete sestavení příkazového řádku, musíte vědět, jak Visual Studio používá k sestavení projektů soubor Dockerfile. Tyto podrobnosti potřebujete znát, protože visual Studio z důvodů výkonu se řídí speciálním procesem sestavování a spouštění kontejnerizovaných aplikací, které nejsou zřejmé ze souboru Dockerfile.

Předpokládejme, že chcete provést změnu v souboru Dockerfile a zobrazit výsledky v ladění i v produkčních kontejnerech. V takovém případě můžete do souboru Dockerfile přidat příkazy, které upraví první fázi (obvykle base). Viz Úprava image kontejneru pro ladění a produkci. Pokud ale chcete provést změnu pouze při ladění, ale ne v produkčním prostředí, měli byste vytvořit další fázi a pomocí DockerfileFastModeStage nastavení sestavení sdělit sadě Visual Studio, aby tuto fázi používala pro sestavení ladění. Viz Úprava image kontejneru pouze pro ladění.

Tento článek podrobně vysvětluje proces sestavení sady Visual Studio pro kontejnerizované aplikace a pak obsahuje informace o tom, jak upravit soubor Dockerfile tak, aby ovlivnil ladění i produkční sestavení, nebo pouze pro ladění.

Sestavení souboru Dockerfile v sadě Visual Studio

Poznámka:

Tato část popisuje proces sestavení kontejneru, který Sada Visual Studio používá při výběru typu sestavení kontejneru Dockerfile. Pokud používáte typ sestavení sady .NET SDK, možnosti přizpůsobení se liší a informace v této části se nepoužijí. Místo toho si přečtěte téma Kontejnerizace aplikace .NET s publikováním dotnet a použití vlastností popsaných v tématu Přizpůsobení kontejneru ke konfiguraci procesu sestavení kontejneru.

Sestavení s více fázemi

Když Visual Studio sestaví projekt, který nepoužívá kontejnery Dockeru, vyvolá nástroj MSBuild na místním počítači a vygeneruje výstupní soubory ve složce (obvykle bin) ve složce místního řešení. U kontejnerizovaného projektu ale proces sestavení bere v úvahu pokyny souboru Dockerfile pro sestavení kontejnerizované aplikace. Soubor Dockerfile, který Visual Studio používá, je rozdělený do několika fází. Tento proces spoléhá na funkci sestavení Dockeru s více fázemi.

Funkce sestavení s více fázemi pomáhá zefektivnit proces sestavování kontejnerů a zmenšuje kontejnery tím, že jim umožní obsahovat pouze bity, které vaše aplikace potřebuje za běhu. Sestavení s více fázemi se používá pro projekty .NET Core, nikoli pro projekty .NET Framework.

Sestavení s více fázemi umožňuje vytváření imagí kontejnerů ve fázích, které vytvářejí zprostředkující image. Jako příklad zvažte typický soubor Dockerfile. První fáze se volá base v souboru Dockerfile, který Sada Visual Studio generuje, i když nástroje tento název nevyžadují.

# 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

Řádky v souboru Dockerfile začínají ASP.NET image ze služby Microsoft Container Registry (mcr.microsoft.com) a vytvoří zprostředkující image base , která zpřístupňuje porty 80 a 443 a nastaví pracovní adresář na /app.

Další fáze je build, která se zobrazí takto:

# 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

Můžete vidět, že build fáze začíná z jiné původní image z registru (sdk místo ), a nikoli aspnetod základu. Image sdk má všechny nástroje sestavení a z tohoto důvodu je mnohem větší než image aspnet, která obsahuje pouze komponenty modulu runtime. Když se podíváte na zbytek souboru Dockerfile, je důvod použití samostatné image jasný:

# 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"]

Poslední fáze začíná znovu od basea zahrnuje COPY --from=publish zkopírování publikovaného výstupu do konečného obrázku. Tento proces umožňuje, aby konečná image byla mnohem menší, protože nemusí obsahovat všechny nástroje sestavení, které byly v imagi sdk .

Následující tabulka shrnuje fáze používané v typickém souboru Dockerfile vytvořeném sadou Visual Studio:

Fáze Popis
base Vytvoří základní image modulu runtime, ve které je vytvořená aplikace publikovaná. Nastavení, která musí být k dispozici za běhu, sem patří porty a proměnné prostředí. Tato fáze se používá při spuštění ze sady VS v rychlém režimu (výchozí pro konfiguraci ladění).
build Projekt je sestavený v této fázi. Používá se základní image sady .NET SDK, která obsahuje komponenty potřebné k sestavení projektu.
publikování Tato fáze je odvozena z fáze sestavení a publikuje projekt, který se zkopíruje do konečné fáze.
finální Tato fáze konfiguruje, jak spustit aplikaci a používá se v produkčním prostředí nebo při spuštění ze sady VS v normálním režimu (výchozí, pokud nepoužíváte konfiguraci ladění).
aotdebug Tato fáze se používá jako základ pro konečnou fázi při spuštění ze sady VS, aby podporovala ladění v běžném režimu (výchozí nastavení, pokud nepoužíváte konfiguraci ladění).

Poznámka:

Fáze aotdebug je podporována pouze pro kontejnery Linuxu. Používá se v sadě Visual Studio 2022 17.11 a novější, pokud je v projektu povolené nativní nasazení před časem (AOT).

Project warmup

Project warmup odkazuje na řadu kroků, ke kterým dojde, když je pro projekt vybraný profil Dockeru (to znamená, že při načtení projektu nebo přidání podpory Dockeru), aby se zlepšil výkon následných spuštění (F5 nebo Ctrl+F5). Toto chování je konfigurovatelné v části Nástroje>Možnosti>kontejneru Nástrojů. Tady jsou úlohy, které běží na pozadí:

  • Zkontrolujte, jestli je nainstalovaná a spuštěná aplikace Docker Desktop.
  • Ujistěte se, že je Docker Desktop nastavený na stejný operační systém jako projekt.
  • Stáhněte image v první fázi souboru Dockerfile ( base fáze ve většině souborů Dockerfile).
  • Sestavte soubor Dockerfile a spusťte kontejner.

K zahřátí dochází pouze v režimu Fast , takže spuštěný kontejner má svazek připojené složky aplikace . To znamená, že jakékoli změny aplikace neoplatní kontejner. Toto chování výrazně zlepšuje výkon ladění a snižuje dobu čekání na dlouhotrvající úlohy, jako je například vyžádání velkých imagí.

Povolení podrobných protokolů nástrojů kontejneru

Pro účely diagnostiky můžete povolit určité protokoly nástroje kontejneru. Tyto protokoly můžete povolit nastavením určitých proměnných prostředí. Pro projekty s jedním kontejnerem je MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLEDproměnná prostředí , která se pak přihlásí %tmp%\Microsoft.VisualStudio.Containers.Tools. Pro projekty Docker Compose je to MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, který se pak přihlásí %tmp%\Microsoft.VisualStudio.DockerCompose.Tools.

Upozorňující

Pokud je protokolování povolené a pro ověřování Azure používáte proxy tokenů, přihlašovací údaje pro ověřování se můžou protokolovat jako prostý text. Viz Konfigurace ověřování Azure.

Další kroky

Přečtěte si, jak pomocí fází souboru Dockerfile přizpůsobit image používané k ladění a produkčnímu prostředí, například jak nainstalovat nástroj na image pouze při ladění. Viz Konfigurace imagí kontejneru pro ladění.