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 projektem typu ASP.NET Core Web App a projektem 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 kontejneru 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 Docker Desktop, 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 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. Zvolte verzi .NET, na kterou chcete cílit. Pokud nevíte, zvolte verzi LTS (dlouhodobá podpora).

    Vytvoření webového projektu – obrazovka s dalšími informacemi

  5. Zvolte, jestli chcete podporu PROTOKOLU SSL vybrat nebo zrušit zaškrtnutí políčka Konfigurovat pro HTTPS .

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

  7. Vyberte požadovaný typ kontejneru (Windows nebo Linux) a pak vyberte Vytvořit.

  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. Zvolte verzi .NET, na kterou chcete cílit. Pokud nevíte, zvolte verzi LTS (dlouhodobá podpora).

    Vytvoření webového projektu – obrazovka s dalšími informacemi

  5. Zvolte, jestli chcete podporu PROTOKOLU SSL vybrat nebo zrušit zaškrtnutí políčka Konfigurovat pro HTTPS .

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

  7. V textovém poli Docker OS vyberte požadovaný typ kontejneru (Windows nebo Linux) a pak vyberte 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 zobrazení 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 myši 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 kódu v Startup.ConfigureServices metodě. Tuto možnost potřebujete povolit pouze v režimu LADĚNÍ, takže kód je následující v Main metodě:

    // 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 konfiguraci řešení na ladění. Potom stisknutím kláves 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 Rejstřík . 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í zarážek

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

  1. V sadě 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. Pokud chcete spustit ladění a stisknout zarážku, stiskněte klávesu F5.

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

    Snímek obrazovky znázorňující část kódu pro Index.cshtml.cs v sadě Visual Studio se zarážkou nastavenou vlevo od řádku kódu, který je zvýrazněný žlutou barvou

    Snímek obrazovky znázorňující část kódu pro Index.cshtml.cs v sadě Visual Studio se zarážkou nastavenou vlevo od řádku kódu, který je zvýrazněný žlutou barvou

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ík řešení klikněte pravým tlačítkem myši na uzel projektu a pak vyberte Přidat>podporu orchestrace kontejnerů. V zobrazeném dialogovém okně 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í zarážek

  1. V Průzkumník ř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 stiskněte zarážku.

  5. Přepněte do sady Visual Studio, abyste zobrazili zarážku a zkontrolovali hodnoty.

    Snímek obrazovky s oknem kódu pro Program.cs v sadě Visual Studio se zarážkou nastavenou vlevo od řádku kódu, který je zvýrazněný žlutě

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 povoleným VisualStudioCredential ) k ověření ve službách Azure pomocí účtu Microsoft Entra bez jakékoli další konfigurace v kontejneru. Pokud to chcete povolit, podívejte se na postup konfigurace nástrojů 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 v Azure. Podpora pro VisualStudioCredential v kontejneru je dostupná v sadě Visual Studio verze 17.6 a novější.

Azure Functions

Pokud ladíte integrovaný projekt Azure Functions a používáte proxy tokenů v kontejneru ke zpracování ověřování ke službám Azure, musíte modul runtime .NET zkopírovat do kontejneru, aby se spustil proxy tokenů. Pokud ladíte izolovaný projekt Azure Functions, už má modul runtime .NET, takže tento dodatečný krok není potřeba.

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

V projektu sady Visual Studio také musíte provést určité změny, které je třeba zadat jako vrstvu, která se má použít při ladění v rychlém režimu. 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 DockerfileFastModeStage MSBuild tak debug , aby používala tuto vrstvu pro ladění. V případě Docker Compose upravte následující docker-compose.vs.debug.yml :

# 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ý Sada Visual Studio obvykle používá pro konfiguraci ladění, Visual Studio znovu sestaví pouze image kontejneru a samotný kontejner při 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 Postup konfigurace nástrojů Visual Studio Container Tools.

Odstraňování potíží

Zjistěte, jak řešit potíže s vývojem v sadě Visual Studio Docker.

Další podrobnosti najdete v článku O tom, jak Visual Studio sestavuje kontejnerizované aplikace.

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