Sdílet prostřednictvím


Ladění aplikací v místním kontejneru Dockeru

Visual Studio poskytuje konzistentní způsob, jak vyvíjet kontejnery Dockeru a ověřovat aplikaci místně. Aplikace můžete spouštět a ladit v kontejnerech Linuxu nebo Windows běžících na místní ploše Windows s nainstalovaným Dockerem a nemusíte kontejner restartovat pokaždé, když provedete změnu kódu.

Tento článek ukazuje, jak pomocí sady Visual Studio spustit aplikaci v místním kontejneru Dockeru, provést změny a pak aktualizovat prohlížeč, aby se změny zobrazily. V tomto článku se také dozvíte, jak nastavit zarážky pro ladění kontejnerizovaných aplikací. Mezi podporované typy projektů patří webová aplikace, konzolová aplikace a funkce Azure, které cílí na .NET Framework a .NET Core. Příklady uvedené v tomto článku jsou projekt typu ASP.NET Core Web App a projekt typu Konzolová aplikace (.NET Framework).

Pokud už máte projekt podporovaného typu, visual Studio může vytvořit soubor Dockerfile a nakonfigurovat projekt tak, aby běžel v kontejneru. Viz Nástroje kontejnerů v sadě Visual Studio.

Požadavky

Pokud chcete ladit aplikace v místním kontejneru Dockeru, musí být nainstalované následující nástroje:

Pokud chcete spouštět kontejnery Dockeru místně, musíte mít místního klienta Dockeru. Můžete použít DesktopDockeru, který vyžaduje Windows 10 nebo novější.

Vytvoření webové aplikace

Pokud máte projekt a přidali jste podporu Dockeru, jak je popsáno v přehledu , přeskočte tuto část.

  1. V úvodním okně sady Visual Studio vyberte Vytvořit nový projekt.

  2. Vyberte ASP.NET Core Web Appa poté vyberte Další.

  3. Zadejte název nové aplikace (nebo použijte výchozí název), zadejte umístění na disku a pak vyberte Další.

  4. Vyberte verzi .NET, na kterou chcete cílit. Pokud si nejste jistí, zvolte verzi LTS (dlouhodobá podpora).

    Snímek obrazovky, který ukazuje, jak vytvořit nový projekt webové aplikace ASP.NET Core v sadě Visual Studio 2019

  5. Vyberte, jestli chcete podporu SSL výběrem nebo zrušením zaškrtnutí políčka Konfigurovat pro HTTPS.

  6. Zaškrtněte políčko Povolit podporu Dockeru.

  7. V rozevíracím seznamu vyberte požadovaný typ kontejneru: Windows nebo Linux.

  8. Vyberte Vytvořit pro dokončení procesu.

  1. V úvodním okně sady Visual Studio vyberte Vytvořit nový projekt.

  2. Vyberte ASP.NET Core Web App a pak vyberte Další.

  3. Zadejte název nové aplikace (nebo použijte výchozí název), zadejte umístění na disku a pak vyberte Další.

  4. Vyberte verzi .NET, na kterou chcete cílit. Pokud si nejste jistí, zvolte verzi LTS (verze s dlouhodobou podporou).

    snímek obrazovky, který ukazuje, jak vytvořit nový projekt webové aplikace ASP.NET Core v sadě Visual Studio 2022

  5. Vyberte, zda chcete podporovat SSL, zaškrtnutím nebo zrušením zaškrtnutí políčka Konfigurovat pro HTTPS.

  6. Zaškrtněte políčko Povolit Docker.

  7. Pomocí rozevíracího seznamu operačního systému Docker vyberte požadovaný typ kontejneru: Windows nebo Linux.

  8. Proces dokončete volbou Vytvořit.

Úprava stránek Razor Pages a aktualizace

Pokud chcete rychle iterovat změny na stránkách Razor Pages, můžete aplikaci spustit v kontejneru. Pak pokračujte v provádění změn a jejich zobrazování jako u služby IIS Express.

  1. Ujistěte se, že je Docker nastavený tak, aby používal typ kontejneru (Linux nebo Windows), který používáte. Klikněte pravým tlačítkem na ikonu Dockeru na hlavním panelu a podle potřeby zvolte Přepnout na kontejnery Linuxu nebo Přepnout na kontejnery Windows.

  2. Úprava kódu a aktualizace spuštěného webu, jak je popsáno v této části, není ve výchozích šablonách v .NET Core a .NET 5 a novějších povolených. Pokud ho chcete povolit, přidejte balíček NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Přidejte volání metody rozšíření AddRazorRuntimeCompilation do kódu v metodě Startup.ConfigureServices. Potřebujete tuto možnost povolit pouze v režimu LADĚNÍ, takže kódujte následovně v metodě Main:

    // Add services to the container.
    var mvcBuilder = builder.Services.AddRazorPages();
    #if DEBUG
        if (Env.IsDevelopment())
        {
            mvcBuilder.AddRazorRuntimeCompilation();
        }
    #endif
    

    Další informace najdete v tématu kompilace souboru Razor v ASP.NET Core. Přesný kód se může lišit v závislosti na cílovém rozhraní a šabloně projektu, kterou jste použili.

  3. Nastavte konfigurace řešení na ladění. Potom stisknutím klávesy Ctrl+F5 sestavte image Dockeru a spusťte ji místně.

    Když je image kontejneru vytvořená a spuštěná v kontejneru Dockeru, Visual Studio spustí webovou aplikaci ve výchozím prohlížeči.

  4. Přejděte na stránku indexu . Na této stránce provedeme změny.

  5. Vraťte se do sady Visual Studio a otevřete Index.cshtml .

  6. Na konec souboru přidejte následující obsah HTML a uložte změny.

    <h1>Hello from a Docker container!</h1>
    
  7. Po dokončení sestavení .NET ve výstupním okně se zobrazí následující řádky, přepněte zpátky do prohlížeče a aktualizujte stránku:

    Now listening on: http://*:80
    Application started. Press Ctrl+C to shut down.
    

Byly použity vaše změny.

Ladění pomocí bodů přerušení

Změny často vyžadují další kontrolu. Pro tuto úlohu můžete použít funkce ladění sady Visual Studio.

  1. Ve Visual Studio otevřete Index.cshtml.cs.

  2. Obsah metody OnGet nahraďte následujícím kódem:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. Nalevo od řádku kódu nastavte zarážku.

  4. Pro spuštění ladění a dosažení bodu přerušení stiskněte klávesu F5.

  5. Přepněte na Visual Studio a zobrazte bod přerušení. Zkontrolujte hodnoty.

    Snímek obrazovky zobrazující část kódu pro Index.cshtml.cs ve Visual Studio se zarážkou nastavenou nalevo od řádku kódu, který je zvýrazněný žlutě.

    Snímek obrazovky znázorňující část kódu pro Index.cshtml.cs ve Visual Studio se zarážkou nastavenou nalevo od kódu zvýrazněného žlutě.

Rychlé načítání

V sadě Visual Studio 17.10 a novějších je také podporováno opětovné načítání za provozu v kontejnerech, i když mějte na paměti, že v kontejneru musíte stránku aktualizovat, abyste viděli změny. Pokud je změna souboru CSS, budete muset znovu aktualizovat stránku, aby se tyto změny zobrazily. Upozorňujeme také, že aktualizace souborů CSS s vymezeným oborem (.razor.css soubory, viz ASP.NET Core Blazor izolace CSS) nejsou podporovány v rámci funkce hot reload.

Vytvoření konzolové aplikace rozhraní .NET Framework

V této části se dozvíte, jak ladit projekt konzolové aplikace rozhraní .NET Framework v místním kontejneru Dockeru tím, že nejprve ukážeme, jak do projektu přidat podporu Dockeru. Je důležité si uvědomit, že různé typy projektů mají různé úrovně podpory Dockeru. Existují dokonce různé úrovně podpory Dockeru pro projekty konzolových aplikací .NET Core (včetně .NET 5 a novějších) a projektů konzolových aplikací rozhraní .NET Framework.

Když se vytvoří projekt konzolové aplikace rozhraní .NET Framework, není možné povolit podporu Dockeru. Po vytvoření takového projektu neexistuje způsob, jak do projektu explicitně přidat podporu Dockeru. Pro projekt konzolové aplikace rozhraní .NET Framework je možné přidat podporu orchestrace kontejnerů. Vedlejším účinkem přidání podpory orchestrace do projektu konzolové aplikace rozhraní .NET Framework je to, že do projektu přidá podporu Dockeru.

Následující postup ukazuje, jak přidat podporu orchestrace do projektu konzolové aplikace rozhraní .NET Framework, který následně do projektu přidá podporu Dockeru a umožňuje, aby byl projekt laděný v místním kontejneru Dockeru.

  1. Vytvořte nový projekt konzolové aplikace rozhraní .NET Framework.
  2. V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu a pak vyberte Přidat>Podpora orchestrace kontejnerů. V dialogovém okně, které se zobrazí, vyberte Docker Compose. Do projektu se přidá soubor Dockerfile a přidá se projekt Docker Compose s přidruženými soubory podpory.

Ladění pomocí zlomových bodů

  1. V Průzkumníku řešení otevřete Program.cs.

  2. Obsah metody Main nahraďte následujícím kódem:

        System.Console.WriteLine("Hello, world!");
    
  3. Nastavte zarážku nalevo od řádku kódu.

  4. Stisknutím klávesy F5 spusťte ladění a dosáhněte bodu přerušení.

  5. Přepněte do Visual Studio a zobrazte zarážku a zkontrolujte hodnoty.

    Snímek obrazovky okna kódu pro Program.cs v aplikaci Visual Studio s breakpointem nastaveným nalevo od řádku kódu, který je žlutě zvýrazněn.

Ověřování ve službách Azure pomocí proxy tokenu

Pokud používáte služby Azure z kontejneru, můžete použít DefaultAzureCredential (s VisualStudioCredential povolenou) k ověření ve službách Azure pomocí účtu Microsoft Entra bez jakékoli další konfigurace v kontejneru. Pokud to chcete povolit, přečtěte si téma Konfigurace nástroje Visual Studio Container Tools. Také je potřeba nastavit ověřování Azure v sadě Visual Studio podle pokynů v tématu Ověření sady Visual Studio pomocí Azure. Podpora pro VisualStudioCredential v kontejneru je dostupná v aplikaci Visual Studio verze 17.6 a novější.

Azure Functions

Pokud ladíte integrovaný projekt Azure Functions a používáte zprostředkovatel tokenů v kontejneru ke zpracování ověřování ke službám Azure, musíte modul runtime .NET zkopírovat do kontejneru, aby mohl zprostředkovatel tokenů fungovat. Pokud ladíte izolovaný projekt Azure Functions, už má runtime .NET, takže tento další krok není nutný.

Pokud chcete zajistit, aby modul runtime .NET byl dostupný pro proxy tokenů, přidejte nebo upravte vrstvu debug v souboru Dockerfile, který zkopíruje modul runtime .NET do image kontejneru. Pro kontejnery Linuxu můžete do souboru Dockerfile přidat následující kód:

# This layer is to support debugging, VS's Token Proxy requires the runtime to be installed in the container
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime
FROM base as debug
COPY --from=runtime /usr/share/dotnet /usr/share/dotnet
RUN ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

Také v projektu Visual Studio je potřeba provést určité změny, abyste tuto vrstvu určili pro použití při ladění v režimu Rychlého módu. Vysvětlení rychlého režimu najdete v tématu Přizpůsobení kontejnerů Dockeru v sadě Visual Studio. Pro scénáře s jedním kontejnerem (ne Docker Compose) nastavte vlastnost MSBuild DockerfileFastModeStage na debug, aby se tato vrstva používala pro ladění. Pro Docker Compose upravte docker-compose.vs.debug.yml následujícím způsobem:

# Set the stage to debug to use an image with the .NET runtime in it
services:
  functionappintegrated:
    build:
      target: debug

Ukázku kódu ověřování pomocí azure Functions, včetně integrovaných i izolovaných scénářů, najdete v tématu VisualStudioCredentialExample.

Opakované použití kontejneru

Pokud používáte Rychlý režim, který Visual Studio běžně používá při konfiguraci ladění, Visual Studio znovu sestaví jen obrazy kontejnerů a samotný kontejner, když dojde ke změně souboru Dockerfile. Pokud soubor Dockerfile nezměníte, Visual Studio znovu použije kontejner z předchozího spuštění.

Pokud jste kontejner ručně upravili a chcete restartovat s čistou imagí kontejneru, použijte příkaz Build>Clean v sadě Visual Studio a pak sestavte jako obvykle.

Pokud nepoužíváte rychlý režim, což je typické pro konfiguraci vydané verze, Visual Studio kontejner znovu sestaví při každém sestavení projektu.

Můžete nakonfigurovat, kdy se používá rychlý režim; Viz Konfigurace nástroje Visual Studio Container Tools.

Odstraňování závad

Zjistěte, jak řešit potíže s vývojem Dockeru ve Visual Studiu.

Další podrobnosti získáte v Jak Visual Studio sestavuje kontejnerizované aplikace.

Další informace o Dockeru s využitím sady Visual Studio, Windows a Azure