Sdílet prostřednictvím


Přizpůsobení kontejnerů 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 kontejneru. 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 změnit soubor Dockerfile a zobrazit výsledky v ladících i 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 obrazu 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í nastavení sestavení ContainerFastModeStage instruovat Visual Studio, aby tuto fázi používalo pro sestavení ladění. Vizte Upravte obraz kontejneru pouze pro ladění.

Předpokládejme, že chcete změnit soubor Dockerfile a zobrazit výsledky v ladících i 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 obrazu 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í nastavení sestavení DockerfileFastModeStage instruovat Visual Studio, aby tuto fázi používalo pro sestavení ladění. Vizte Upravte obraz 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í.

Požadavky

Požadavky

  • Docker Desktop.
  • Visual Studio s nainstalovanou úlohou vývoje pro ASP.NET a webový vývoj, úlohou vývoje pro Azure a/nebo úlohou vývoje pomocí .NET pro desktop.

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) v místní složce ř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 multistage build Dockeru.

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.

Vícefázové sestavení umožňuje vytváření obrazů kontejnerů ve fázích, které produkují mezilehlé obrazy. Jako příklad zvažte typický soubor Dockerfile. První fáze se nazývá base v souboru Dockerfile, který sada Visual Studio vygeneruje, 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:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Řá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 8080 a 8081 a nastaví pracovní adresář na /app.

Když cílíte na .NET 7 a novější, zobrazí se řádek USER $APP_UID, který nastaví kontejner ke spuštění bez zvýšených oprávnění s uživatelským jménem získaným z proměnné APP_UID prostředí. Porty jsou 8080 a 8081, nikoli 80 a 443, které vyžadují zvýšená oprávnění.

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

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 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 fáze build začíná z jiné původní image z registru (sdk místo aspnet), místo pokračování od 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 z basea obsahuje COPY --from=publish ke 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:

Etapa Popis
báze Vytvoří základní obraz runtime, kde je publikována vytvořená aplikace. 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í z Visual Studio 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.
publikovat Tato fáze je odvozena z fáze sestavení a publikuje váš projekt, který bude zkopírován do finální fáze.
finále Tato fáze konfiguruje, jak spustit aplikaci, a používá se v produkčním prostředí nebo při spuštění z Visual Studia v běžném režimu (což je výchozí možnost, pokud nepoužíváte konfiguraci ladění).
aotdebug Tato fáze slouží jako základ pro konečnou fázi při spouštění z Visual Studio, aby podporovala ladění ve výchozím režimu (pokud není použita konfigurace Debug).

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í AOT (Ahead Of Time).

Zahřívací fáze projektu

Project warmup odkazuje na řadu kroků, ke kterým dochází, když je pro projekt vybraný profil kontejneru (to znamená, že když je přidán projekt nebo je přidána podpora kontejneru), aby se zlepšil výkon následných spuštění (F5 nebo Ctrl+F5).

Toto chování je možné konfigurovat v podokně Nástroje>Možnosti v části Všechna nastavení>Nástroje kontejneru. Tady jsou úlohy, které běží na pozadí:

  • Zkontrolujte, jestli je nainstalovaný a spuštěný modul runtime kontejneru (Docker Desktop nebo Podman).
  • Ujistěte se, že je Docker Desktop nastavený na stejný operační systém jako projekt. (Tato kontrola se nevztahuje na podman, který podporuje pouze linuxové kontejnery.)
  • Stáhněte obrazy v prvním kroku souboru Dockerfile (v base fáze ve většině souborů Dockerfile).
  • Sestavte soubor Dockerfile a spusťte kontejner.

Toto chování lze konfigurovat v nabídce Nástroje>Možnosti>Nástroje kontejneru. 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 obrazy v prvním kroku souboru Dockerfile (v base fáze ve většině souborů Dockerfile).
  • Sestavte soubor Dockerfile a spusťte kontejner.

K zahřátí dochází jenom v režimu Fast, takže spuštěný kontejner má svazek složky app připojený. To znamená, že jakékoli změny aplikace neučiní kontejner neplatným. 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 stahování velkých obrázků.

Povolit podrobné logy nástrojů kontejneru

Pro diagnostické účely můžete povolit určité protokoly nástroje pro kontejnery. Tyto protokoly můžete povolit nastavením určitých proměnných prostředí. U projektů s jedním kontejnerem je proměnná prostředí MS_VS_CONTAINERS_TOOLS_LOGGING_ENABLED, která se pak přihlásí do %tmp%\Microsoft.VisualStudio.Containers.Tools. U projektů Docker Compose je proměnná MS_VS_DOCKER_TOOLS_LOGGING_ENABLED, která se pak použije k přihlášení %tmp%\Microsoft.VisualStudio.DockerCompose.Tools.

Varování

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 Konfiguraceověř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í.