Debugowanie aplikacji w lokalnym kontenerze platformy Docker

Program Visual Studio zapewnia spójny sposób tworzenia kontenerów platformy Docker i weryfikowania aplikacji lokalnie. Aplikacje można uruchamiać i debugować w kontenerach systemu Linux lub Windows uruchomionych na lokalnym pulpicie systemu Windows przy użyciu zainstalowanej platformy Docker i nie trzeba ponownie uruchamiać kontenera za każdym razem, gdy wprowadzasz zmianę kodu.

W tym artykule pokazano, jak za pomocą programu Visual Studio uruchomić aplikację w lokalnym kontenerze platformy Docker, wprowadzić zmiany, a następnie odświeżyć przeglądarkę, aby zobaczyć zmiany. W tym artykule przedstawiono również sposób ustawiania punktów przerwania na potrzeby debugowania dla aplikacji konteneryzowanych. Obsługiwane typy projektów obejmują aplikację internetową, aplikację konsolową i funkcję platformy Azure przeznaczoną dla platform .NET Framework i .NET Core. Przykłady przedstawione w tym artykule to projekt typu ASP.NET Core Web App i projekt typu Aplikacja konsolowa (.NET Framework).

Jeśli masz już projekt obsługiwanego typu, program Visual Studio może utworzyć plik Dockerfile i skonfigurować projekt do uruchamiania w kontenerze. Zobacz Narzędzia kontenera w programie Visual Studio.

Wymagania wstępne

Aby debugować aplikacje w lokalnym kontenerze platformy Docker, należy zainstalować następujące narzędzia:

Aby uruchamiać kontenery platformy Docker lokalnie, musisz mieć lokalnego klienta platformy Docker. Możesz użyć programu Docker Desktop, który wymaga systemu Windows 10 lub nowszego.

Tworzenie aplikacji internetowej

Jeśli masz projekt i dodano obsługę platformy Docker zgodnie z opisem w omówieniu, pomiń tę sekcję.

  1. W oknie startowym programu Visual Studio wybierz pozycję Utwórz nowy projekt.

  2. Wybierz pozycję ASP.NET Core Web App, a następnie wybierz przycisk Dalej.

  3. Wprowadź nazwę nowej aplikacji (lub użyj nazwy domyślnej), określ lokalizację na dysku, a następnie wybierz przycisk Dalej.

  4. Wybierz wersję platformy .NET, która ma być docelowa. Jeśli nie wiesz, wybierz wersję LTS (długoterminowa pomoc techniczna).

    Tworzenie projektu internetowego — ekran dodatkowe informacje

  5. Wybierz, czy chcesz obsługiwać protokół SSL, zaznaczając lub usuwając zaznaczenie pola wyboru Konfiguruj dla protokołu HTTPS .

  6. Zaznacz pole wyboru Włącz obsługę platformy Docker.

  7. Wybierz odpowiedni typ kontenera (Windows lub Linux), a następnie wybierz pozycję Utwórz.

  1. W oknie startowym programu Visual Studio wybierz pozycję Utwórz nowy projekt.

  2. Wybierz pozycję ASP.NET Core Web App, a następnie wybierz przycisk Dalej.

  3. Wprowadź nazwę nowej aplikacji (lub użyj nazwy domyślnej), określ lokalizację na dysku, a następnie wybierz przycisk Dalej.

  4. Wybierz wersję platformy .NET, która ma być docelowa. Jeśli nie wiesz, wybierz wersję LTS (długoterminowa pomoc techniczna).

    Tworzenie projektu internetowego — ekran dodatkowe informacje

  5. Wybierz, czy chcesz obsługiwać protokół SSL, zaznaczając lub usuwając zaznaczenie pola wyboru Konfiguruj dla protokołu HTTPS .

  6. Zaznacz pole wyboru Włącz platformę Docker .

  7. W polu tekstowym Docker OS (System operacyjny Platformy Docker) wybierz odpowiedni typ kontenera (Windows lub Linux), a następnie wybierz pozycję Utwórz.

Edytowanie stron Razor i odświeżanie

Aby szybko iterować zmiany na stronach Razor, możesz uruchomić aplikację w kontenerze. Następnie kontynuuj wprowadzanie zmian, wyświetlając je tak, jak w przypadku usług IIS Express.

  1. Upewnij się, że platforma Docker jest skonfigurowana do używania typu kontenera (Linux lub Windows), którego używasz. Kliknij prawym przyciskiem myszy ikonę platformy Docker na pasku zadań, a następnie wybierz pozycję Przełącz do kontenerów systemu Linux lub Przełącz do kontenerów systemu Windows odpowiednio.

  2. Edytowanie kodu i odświeżanie uruchomionej witryny zgodnie z opisem w tej sekcji nie jest włączone w szablonach domyślnych w programach .NET Core i .NET 5 i nowszych. Aby ją włączyć, dodaj pakiet NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Dodaj wywołanie metody rozszerzenia AddRazorRuntimeCompilation do kodu w metodzie Startup.ConfigureServices . Ta opcja jest włączona tylko w trybie DEBUG, więc należy go kodować w następujący sposób w metodzie Main :

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

    Aby uzyskać więcej informacji, zobacz Kompilacja plików Razor w programie ASP.NET Core. Dokładny kod może się różnić w zależności od platformy docelowej i użytego szablonu projektu.

  3. Ustaw pozycję Konfiguracja rozwiązania na Debugowanie. Następnie naciśnij klawisze Ctrl+F5 , aby skompilować obraz platformy Docker i uruchomić go lokalnie.

    Gdy obraz kontenera zostanie skompilowany i uruchomiony w kontenerze platformy Docker, program Visual Studio uruchomi aplikację internetową w domyślnej przeglądarce.

  4. Przejdź do strony Indeks . Wprowadzimy zmiany na tej stronie.

  5. Wróć do programu Visual Studio i otwórz plik Index.cshtml.

  6. Dodaj następującą zawartość HTML na końcu pliku, a następnie zapisz zmiany.

    <h1>Hello from a Docker container!</h1>
    
  7. W oknie danych wyjściowych po zakończeniu kompilacji platformy .NET zobaczysz następujące wiersze, wróć do przeglądarki i odśwież stronę:

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

Twoje zmiany zostały zastosowane!

Debugowanie przy użyciu punktów przerwania

Często zmiany wymagają dalszej inspekcji. W tym zadaniu można użyć funkcji debugowania programu Visual Studio.

  1. W programie Visual Studio otwórz Index.cshtml.cs.

  2. Zastąp zawartość metody OnGet następującym kodem:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. Po lewej stronie wiersza kodu ustaw punkt przerwania.

  4. Aby rozpocząć debugowanie i nacisnąć punkt przerwania, naciśnij klawisz F5.

  5. Przejdź do programu Visual Studio, aby wyświetlić punkt przerwania. Sprawdź wartości.

    Zrzut ekranu przedstawiający część kodu dla Index.cshtml.cs w programie Visual Studio z punktem przerwania ustawionym po lewej stronie wiersza kodu wyróżnionego kolorem żółtym.

    Zrzut ekranu przedstawiający część kodu dla Index.cshtml.cs w programie Visual Studio z punktem przerwania ustawionym po lewej stronie wiersza kodu wyróżnionego kolorem żółtym.

Tworzenie aplikacji konsolowej .NET Framework

W tej sekcji przedstawiono sposób debugowania projektu aplikacji konsolowej programu .NET Framework w lokalnym kontenerze platformy Docker, pokazując najpierw sposób dodawania obsługi platformy Docker do projektu. Należy pamiętać, że różne typy projektów mają różne poziomy obsługi platformy Docker. Istnieją nawet różne poziomy obsługi platformy Docker dla platformy .NET Core (w tym .NET 5 i nowszych) projektów aplikacji konsolowych w porównaniu z projektami aplikacji konsolowych programu .NET Framework.

Po utworzeniu projektu aplikacji konsolowej .NET Framework nie ma możliwości włączenia obsługi platformy Docker. Po utworzeniu takiego projektu nie ma możliwości jawnego dodania obsługi platformy Docker do projektu. W przypadku projektu aplikacji konsolowej .NET Framework można dodać obsługę aranżacji kontenerów. Efektem ubocznym dodawania obsługi orkiestracji do projektu aplikacji konsolowej programu .NET Framework jest dodanie obsługi platformy Docker do projektu.

Poniższa procedura przedstawia sposób dodawania obsługi orkiestracji do projektu aplikacji konsolowej programu .NET Framework, który następnie dodaje obsługę platformy Docker do projektu i umożliwia debugowanie projektu w lokalnym kontenerze platformy Docker.

  1. Utwórz nowy projekt aplikacji konsolowej .NET Framework.
  2. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu, a następnie wybierz polecenie Dodaj>obsługę orkiestracji kontenerów. W wyświetlonym oknie dialogowym wybierz pozycję Docker Compose. Plik Dockerfile jest dodawany do projektu, a dodawany jest projekt Docker Compose ze skojarzonymi plikami pomocy technicznej.

Debugowanie przy użyciu punktów przerwania

  1. W Eksplorator rozwiązań otwórz Program.cs.

  2. Zastąp zawartość metody Main następującym kodem:

        System.Console.WriteLine("Hello, world!");
    
  3. Ustaw punkt przerwania po lewej stronie wiersza kodu.

  4. Naciśnij klawisz F5 , aby rozpocząć debugowanie i naciśnij punkt przerwania.

  5. Przejdź do programu Visual Studio, aby wyświetlić punkt przerwania i sprawdzić wartości.

    Zrzut ekranu przedstawiający okno kodu dla Program.cs w programie Visual Studio z punktem przerwania ustawionym po lewej stronie wiersza kodu wyróżnionego kolorem żółtym.

Uwierzytelnianie w usługach platformy Azure przy użyciu serwera proxy tokenu

W przypadku korzystania z usług platformy Azure z kontenera możesz użyć wartości DefaultAzureCredential (z włączoną funkcją VisualStudioCredential ), aby uwierzytelnić się w usługach platformy Azure przy użyciu konta Microsoft Entra bez żadnej dodatkowej konfiguracji w kontenerze. Aby to włączyć, zobacz How to configure Visual Studio Container Tools (Jak skonfigurować narzędzia kontenera programu Visual Studio). Ponadto należy skonfigurować uwierzytelnianie platformy Azure w programie Visual Studio, postępując zgodnie z instrukcjami w temacie Uwierzytelnianie programu Visual Studio za pomocą platformy Azure. Obsługa programu VisualStudioCredential w kontenerze jest dostępna w programie Visual Studio w wersji 17.6 lub nowszej.

Azure Functions

Jeśli debugujesz zintegrowany projekt usługi Azure Functions i używasz serwera proxy tokenów w kontenerze do obsługi uwierzytelniania w usługach platformy Azure, musisz skopiować środowisko uruchomieniowe platformy .NET do kontenera, aby serwer proxy tokenu był uruchamiany. Jeśli debugujesz izolowany projekt usługi Azure Functions, ma już środowisko uruchomieniowe platformy .NET, więc nie ma potrzeby wykonywania tego dodatkowego kroku.

Aby upewnić się, że środowisko uruchomieniowe platformy .NET jest dostępne dla serwera proxy tokenu, dodaj lub zmodyfikuj debug warstwę w pliku Dockerfile, który kopiuje środowisko uruchomieniowe platformy .NET do obrazu kontenera. W przypadku kontenerów systemu Linux można dodać następujący kod do pliku Dockerfile:

# 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

Ponadto w projekcie programu Visual Studio należy wprowadzić pewne zmiany, aby określić to jako warstwę do użycia podczas debugowania w trybie szybkim. Aby uzyskać wyjaśnienie trybu szybkiego, zobacz Dostosowywanie kontenerów platformy Docker w programie Visual Studio. W przypadku scenariuszy pojedynczego kontenera (a nie narzędzia Docker Compose) ustaw właściwość DockerfileFastModeStagedebug MSBuild na w celu użycia tej warstwy do debugowania. W przypadku narzędzia Docker Compose zmodyfikuj plik w docker-compose.vs.debug.yml następujący sposób:

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

Aby zapoznać się z przykładem kodu uwierzytelniania za pomocą usługi Azure Functions, w tym scenariuszami zintegrowanymi i izolowanymi, zobacz VisualStudioCredentialExample.

Ponowne użycie kontenera

W przypadku korzystania z trybu szybkiego, który program Visual Studio zwykle używa do konfiguracji debugowania, program Visual Studio ponownie kompiluje tylko obrazy kontenera i sam kontener po zmianie pliku Dockerfile. Jeśli nie zmienisz pliku Dockerfile, program Visual Studio ponownie użyje kontenera z wcześniejszego uruchomienia.

Jeśli kontener został ręcznie zmodyfikowany i chcesz ponownie uruchomić go przy użyciu czystego obrazu kontenera, użyj polecenia Build Clean w programie Visual Studio, a następnie skompiluj>je normalnie.

Jeśli nie używasz trybu szybkiego, co jest typowe dla konfiguracji wydania, program Visual Studio ponownie kompiluje kontener za każdym razem, gdy projekt zostanie skompilowany.

Można skonfigurować, gdy jest używany tryb szybki; Zobacz Jak skonfigurować narzędzia kontenerów programu Visual Studio.

Rozwiązywanie problemów

Dowiedz się, jak rozwiązywać problemy z programowaniem platformy Docker w programie Visual Studio.

Aby uzyskać więcej informacji, przeczytaj artykuł How Visual Studio builds containerized apps (Jak program Visual Studio kompiluje konteneryzowane aplikacje).

Więcej informacji na temat platformy Docker przy użyciu programu Visual Studio, systemu Windows i platformy Azure