Отладка приложений в локальном контейнере DockerDebug apps in a local Docker container

Visual Studio обеспечивает согласованную разработку контейнеров Docker и локальную проверку приложения.Visual Studio provides a consistent way to develop Docker containers and validate your application locally. Вы можете запускать и отлаживать свои приложения в контейнерах Linux или Windows, работающих на локальном рабочем столе Windows с установленным Docker. При этом вам не нужно перезапускать контейнер каждый раз, когда вы вносите изменения в код.You can run and debug your apps in Linux or Windows containers running on your local Windows desktop with Docker installed, and you don't have to restart the container each time you make a code change.

В этой статье рассказывается, как запускать приложение в локальном контейнере Docker с помощью Visual Studio, вносить изменения и обновлять браузер для их отображения.This article illustrates how to use Visual Studio to start an app in a local Docker container, make changes, and then refresh the browser to see the changes. В ней также показано, как устанавливать точки останова для отладки контейнерных приложений.This article also shows you how to set breakpoints for debugging for containerized apps. Поддерживаемые типы проектов включают в себя консольные и веб-приложения .NET Framework и .NET Core.Supported project types include .NET Framework and .NET Core web and console apps. В этой статье используются веб-приложения ASP.NET Core и консольные приложения .NET Framework.In this article, we use ASP.NET Core web apps and .NET Framework console apps.

Если у вас уже есть проект поддерживаемого типа, Visual Studio может создать Dockerfile и настроить проект для запуска в контейнере.If you already have a project of a supported type, Visual Studio can create a Dockerfile and configure your project to run in a container. Ознакомьтесь со статьей Средства для контейнеров в Visual Studio.See Container Tools in Visual Studio.

Предварительные требованияPrerequisites

Для отладки приложений в локальном контейнере Docker необходимо установить следующие средства:To debug apps in a local Docker container, the following tools must be installed:

Для запуска контейнеров Docker локально требуется локальный клиент Docker.To run Docker containers locally, you must have a local Docker client. Можно воспользоваться приложением Docker для Windows, для которой требуются Hyper-V и Windows 10.You can use Docker for Windows, which uses Hyper-V and requires Windows 10.

Контейнеры Docker доступны для проектов .NET Framework и .NET Core.Docker containers are available for .NET Framework and .NET Core projects. Рассмотрим два примера.Let's look at two examples. Сначала мы рассмотрим веб-приложение .NET Core.First, we look at a .NET Core web app. Затем мы рассмотрим консольное приложение .NET Framework.Then, we look at a .NET Framework console app.

Создание веб-приложенияCreate a web app

Пропустите этот раздел, если у вас есть проект и вы добавили поддержку Docker, как описано в обзоре.If you have a project and you've added Docker support as described in the overview, skip this section.

  1. В меню Visual Studio последовательно выберите Файл > Создать > Проект.In the Visual Studio menu, select File > New > Project.
  2. В разделе Шаблоны диалогового окна Новый проект выберите Visual C# > Веб-проект.In the Templates section of the New Project dialog box, select Visual C# > Web.
  3. Выберите Веб-приложение ASP.NET Core.Select ASP.NET Core Web Application.
  4. Введите имя нового приложения (или оставьте имя по умолчанию) и нажмите кнопку ОК.Enter a name for your new application (or use the default name), and then select OK.
  5. Выберите Веб-приложение.Select Web Application.
  6. Установите флажок Включить поддержку Docker.Select the Enable Docker Support check box.
  7. Выберите тип контейнера (Windows или Linux) и нажмите кнопку ОК.Select the type of container you want (Windows or Linux), and then select OK.
  1. В начальном окне Visual Studio выберите Создать проект.In the Visual Studio start window, select Create a new project.
  2. Выберите шаблон Веб-приложение ASP.NET Core и нажмите кнопку Далее.Select ASP.NET Core Web Application, and then select Next.
  3. Введите имя нового приложения (или оставьте имя по умолчанию) и нажмите кнопку Создать.Enter a name for your new application (or use the default name), and then select Create.
  4. Выберите Веб-приложение.Select Web Application.
  5. Решите, требуется ли вам поддержка SSL, установив или сняв флажок Настроить для HTTPS.Choose whether you want SSL support by selecting or clearing the Configure for HTTPS check box.
  6. Установите флажок Включить поддержку Docker.Select the Enable Docker Support check box.
  7. Выберите тип контейнера (Windows или Linux) и нажмите кнопку Создать.Select the type of container you want (Windows or Linux), and then select Create.

Изменение и обновление кодаEdit your code and refresh

Для быстрой итерации изменений можно запустить приложение в контейнере.To quickly iterate changes, you can start your application in a container. Затем продолжайте вносить изменения, просматривая их так же, как в IIS Express.Then, continue to make changes, viewing them as you would with IIS Express.

  1. Убедитесь, что Docker настроен для применения типа контейнера (Linux или Windows), который вы используете.Make sure that Docker is set up to use the container type (Linux or Windows) that you are using. На панели задач щелкните правой кнопкой мыши значок Docker и выберите пункт Switch to Linux containers (Переключиться на контейнеры Linux) или Switch to Windows containers (Переключиться на контейнеры Windows) в зависимости от ситуации.Right-click on the Docker icon on the Taskbar, and choose Switch to Linux containers or Switch to Windows containers as appropriate.

  2. (Только для .NET Core 3 и более поздних версий) Изменение кода и обновление работающего сайта, как описано в этом разделе, не включены в шаблоны по умолчанию в .NET Core 3.0 и более поздних версий.(.NET Core 3 and later only) Editing your code and refreshing the running site as described in this section is not enabled in the default templates in .NET Core >= 3.0. Чтобы включить их, установить пакет NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.To enable it, add the NuGet package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. В Startup.cs добавьте вызов метода расширения IMvcBuilder.AddRazorRuntimeCompilation в код в методе ConfigureServices.In Startup.cs, add a call to the extension method IMvcBuilder.AddRazorRuntimeCompilation to the code in the ConfigureServices method. Этот параметр должен быть включен только в режиме отладки, поэтому код должен выглядеть следующим образом:You only need this enabled in DEBUG mode, so code it as follows:

    public IWebHostEnvironment Env { get; set; }
    
    public void ConfigureServices(IServiceCollection services)
    {
        IMvcBuilder builder = services.AddRazorPages();
    
    #if DEBUG
        if (Env.IsDevelopment())
        {
            builder.AddRazorRuntimeCompilation();
        }
    #endif
    
        // code omitted for brevity
    }
    

    Измените метод Startup следующим образом.Modify the Startup method as follows:

    public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
    {
        Configuration = configuration;
        Env = webHostEnvironment;
    }
    

    Дополнительные сведения см. в статье Компиляция файла Razor в ASP.NET Core.For more information, see Razor file compilation in ASP.NET Core.

  3. В качестве конфигурации решения выберите Отладка.Set Solution Configuration to Debug. Затем нажмите клавиши CTRL+F5, чтобы создать образ Docker и запустить его локально.Then, press Ctrl+F5 to build your Docker image and run it locally.

    После сборки и запуска образа контейнера в контейнере Docker среда Visual Studio запустит веб-приложение в вашем браузере по умолчанию.When the container image is built and running in a Docker container, Visual Studio launches the web app in your default browser.

  4. Перейдите на страницу Index (Индекс).Go to the Index page. Мы будем вносить на ней изменения.We'll make changes on this page.

  5. Вернитесь в Visual Studio и откройте файл Index.cshtml.Return to Visual Studio and open Index.cshtml.

  6. Добавьте приведенное ниже содержимое HTML в конец файла и сохраните изменения.Add the following HTML content to the end of the file, and then save the changes.

    <h1>Hello from a Docker container!</h1>
    
  7. Когда сборка .NET завершится и в окне вывода будут отображаться следующие строки, вернитесь в браузер и обновите страницу:In the output window, when the .NET build is finished and you see the following lines, switch back to your browser and refresh the page:

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

Изменения применены!Your changes have been applied!

Отладка с точками остановаDebug with breakpoints

Изменения часто требуют дальнейшей проверки.Often, changes require further inspection. Для этого можно использовать функции отладки Visual Studio.You can use the debugging features of Visual Studio for this task.

  1. В Visual Studio откройте файл Index.cshtml.cs.In Visual Studio, open Index.cshtml.cs.

  2. Замените содержимое метода OnGet следующим кодом:Replace the contents of the OnGet method with the following code:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. Установите точку останова слева от строки кода.To the left of the code line, set a breakpoint.

  4. Чтобы начать отладку и достичь точки останова, нажмите клавишу F5.To start debugging and hit the breakpoint, press F5.

  5. Переключитесь в Visual Studio, чтобы просмотреть точку останова.Switch to Visual Studio to view the breakpoint. Проверьте значения.Inspect values.

    Снимок экрана: часть кода для Index.cshtml.cs в Visual Studio, для которого точка останова установлена слева от строки кода, выделенной желтым цветом.

Создание консольного приложения .NET FrameworkCreate a .NET Framework console app

При использовании проектов консольных приложений .NET Framework возможность добавления поддержки Docker без оркестрации недоступна.When you use .NET Framework console app projects, the option to add Docker support without orchestration isn't supported. Описанную ниже процедуру можно выполнить, даже если вы используете только один проект Docker.You can still use the following procedure, even if you're using only a single Docker project.

  1. Создайте проект консольного приложения .NET Framework.Create a new .NET Framework Console app project.
  2. В обозревателе решений щелкните правой кнопкой мыши узел проекта и выберите Добавить > Container Orchestration Support (Поддержка оркестрации контейнеров).In Solution Explorer, right-click the project node, and then select Add > Container Orchestration Support. В появившемся диалоговом окне выберите Docker Compose.In the dialog box that appears, select Docker Compose. Файл Dockerfile будет добавлен в проект, а проект Docker Compose со вспомогательными файлами будет добавлен в решение.A Dockerfile is added to your project and a Docker Compose project with associated support files is added.

Отладка с точками остановаDebug with breakpoints

  1. В обозревателе решений откройте файл Program.cs.In Solution Explorer, open Program.cs.

  2. Замените содержимое метода Main следующим кодом:Replace the contents of the Main method with the following code:

        System.Console.WriteLine("Hello, world!");
    
  3. Установите точку останова слева от строки кода.Set a breakpoint to the left of the code line.

  4. Чтобы начать отладку и достичь точки останова, нажмите клавишу F5.Press F5 to start debugging and hit the breakpoint.

  5. Переключитесь в Visual Studio, чтобы просмотреть точку останова и проверить значения.Switch to Visual Studio to view the breakpoint and inspect values.

    Снимок экрана: окно кода для Program.cs в Visual Studio, для которого точка останова установлена слева от строки кода, выделенной желтым цветом.

Повторное использование контейнеровContainer reuse

Во время цикла разработки среда Visual Studio перестраивает образы контейнеров и сам контейнер только при изменении файла Dockerfile.During the development cycle, Visual Studio rebuilds only your container images and the container itself when you change the Dockerfile. Если файл Dockerfile не изменяется, Visual Studio повторно использует контейнер из предыдущего запуска.If you don't change the Dockerfile, Visual Studio reuses the container from an earlier run.

Если вы вручную изменили контейнер и хотите выполнить перезапуск с чистым образом контейнера, выберите команду Сборка > Очистить, а затем выполните сборку как обычную.If you manually modified your container and want to restart with a clean container image, use the Build > Clean command in Visual Studio, and then build as normal.

Устранение неполадокTroubleshoot

Узнайте, как устранять неполадки при разработке Docker в Visual Studio.Learn how to troubleshoot Visual Studio Docker development.

Следующие шагиNext steps

Дополнительные сведения см. в статье Как Visual Studio создает контейнерные приложения.Get more details by reading How Visual Studio builds containerized apps.

Дополнительные сведения об использовании Docker с Visual Studio, Windows и AzureMore about Docker with Visual Studio, Windows, and Azure