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 produkční. 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í.
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 sestavení Dockeru multistage.
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:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
Řádky v souboru Dockerfile začínají image ASP.NET z 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 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 base
a 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 |
---|---|
základna | 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í). |
vybudovat | 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. |
závěrečný | 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ších, pokud nativní nasazení před časem (AOT) v projektu povoleno.
Zahřívací fáze projektu
Zahřívací fáze projektu označuje sérii kroků, které nastanou, když je pro projekt vybrán profil Docker (to znamená, při načtení projektu nebo při přidání podpory Docker), aby se zlepšil výkon následných spuštění (F5 nebo Ctrl+F5). 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á aplikaci svazek připojené ke složce. 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ů.
Povolení podrobných protokolů 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
. Pro projekty Docker Compose je to MS_VS_DOCKER_TOOLS_LOGGING_ENABLED
, který následně provede přihlášení do %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í.