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:
- Program Visual Studio 2019 z zainstalowanym pakietem roboczym Tworzenie aplikacji internetowych
- Program Visual Studio 2022 z zainstalowanym pakietem roboczym Tworzenie aplikacji internetowych
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ę.
W oknie startowym programu Visual Studio wybierz pozycję Utwórz nowy projekt.
Wybierz pozycję ASP.NET Core Web App, a następnie wybierz przycisk Dalej.
Wprowadź nazwę nowej aplikacji (lub użyj nazwy domyślnej), określ lokalizację na dysku, a następnie wybierz przycisk Dalej.
Wybierz wersję platformy .NET, która ma być docelowa. Jeśli nie masz pewności, wybierz wersję LTS (długoterminowa pomoc techniczna).
Wybierz, czy chcesz obsługiwać protokół SSL, zaznaczając lub usuwając zaznaczenie pola wyboru Konfiguruj dla protokołu HTTPS .
Zaznacz pole wyboru Włącz obsługę platformy Docker.
Użyj listy rozwijanej, aby wybrać typ kontenera: Windows lub Linux.
Wybierz Utwórz, aby zakończyć proces.
W oknie startowym programu Visual Studio wybierz pozycję Utwórz nowy projekt.
Wybierz pozycję ASP.NET Core Web App, a następnie wybierz przycisk Dalej.
Wprowadź nazwę nowej aplikacji (lub użyj nazwy domyślnej), określ lokalizację na dysku, a następnie wybierz przycisk Dalej.
Wybierz wersję platformy .NET, która ma być docelowa. Jeśli nie masz pewności, wybierz wersję LTS (długoterminowa pomoc techniczna).
Wybierz, czy chcesz obsługiwać protokół SSL, zaznaczając lub usuwając zaznaczenie pola wyboru Konfiguruj dla protokołu HTTPS .
Zaznacz pole wyboru Włącz platformę Docker .
Użyj listy rozwijanej Docker OS , aby wybrać typ kontenera: Windows lub Linux.
Wybierz Utwórz, aby zakończyć proces.
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 Internet Information Services (IIS) Express.
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.
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 metodzieMain
:// 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.
Ustaw pozycję Konfiguracja rozwiązania na Debugowanie. Następnie naciśnij 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.
Przejdź do strony Indeks . Wprowadzimy zmiany na tej stronie.
Wróć do programu Visual Studio i otwórz plik Index.cshtml.
Dodaj następującą zawartość HTML na końcu pliku, a następnie zapisz zmiany.
<h1>Hello from a Docker container!</h1>
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.
W programie Visual Studio otwórz Index.cshtml.cs.
Zastąp zawartość metody
OnGet
następującym kodem:ViewData["Message"] = "Your application description page from within a container";
Po lewej stronie wiersza kodu ustaw punkt przerwania.
Aby rozpocząć debugowanie i nacisnąć punkt przerwania, naciśnij F5.
Przejdź do programu Visual Studio, aby wyświetlić punkt przerwania. Sprawdź wartości.
Gorące ponowne ładowanie
Ponadto w programie Visual Studio 17.10 lub nowszym Przeładowywanie na gorąco jest obsługiwana w kontenerach, chociaż należy pamiętać, że w kontenerze należy odświeżyć stronę, aby zobaczyć zmiany. Jeśli zmiana dotyczy pliku CSS, należy ponownie odświeżyć stronę, aby zobaczyć te zmiany. Należy również pamiętać, że aktualizacje plików CSS o określonym zakresie (.razor.css
pliki, zobacz ASP.NET izolacja CSS Core Blazor) nie są obsługiwane w ramach przeładowywania na gorąco.
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.
- Utwórz nowy projekt aplikacji konsolowej .NET Framework.
- 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
W Eksplorator rozwiązań otwórz Program.cs.
Zastąp zawartość metody
Main
następującym kodem:System.Console.WriteLine("Hello, world!");
Ustaw punkt przerwania po lewej stronie wiersza kodu.
Naciśnij F5 , aby rozpocząć debugowanie i naciśnij punkt przerwania.
Przejdź do programu Visual Studio, aby wyświetlić punkt przerwania i sprawdzić wartości.
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ść DockerfileFastModeStage
debug
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.
Powiązana zawartość
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
- Dowiedz się więcej o tworzeniu kontenerów za pomocą programu Visual Studio.
- Aby skompilować i wdrożyć kontener platformy Docker, zobacz Integracja platformy Docker dla usługi Azure Pipelines.
- Aby zapoznać się z indeksem artykułów dotyczących systemów Windows Server i Nano Server, zobacz Informacje o kontenerze systemu Windows.
- Dowiedz się więcej o usłudze Azure Kubernetes Service i zapoznaj się z dokumentacją usługi Azure Kubernetes Service.