Depurar aplicativos em um contêiner do Docker localDebug apps in a local Docker container

O Visual Studio fornece uma maneira consistente de desenvolver contêineres do Docker e validar seu aplicativo localmente.Visual Studio provides a consistent way to develop Docker containers and validate your application locally. Você pode executar e depurar seus aplicativos em contêineres do Linux ou do Windows em execução na área de trabalho do Windows local com o Docker instalado e não precisa reiniciar o contêiner sempre que fizer uma alteração no código.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.

Este artigo ilustra como usar o Visual Studio para iniciar um aplicativo em um contêiner do Docker local, fazer alterações e, em seguida, atualizar o navegador para ver as alterações.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. Este artigo também mostra como definir pontos de interrupção para depuração de aplicativos em contêineres.This article also shows you how to set breakpoints for debugging for containerized apps. Os tipos de projeto com suporte incluem .NET Framework e .NET Core Web e aplicativos de console.Supported project types include .NET Framework and .NET Core web and console apps. Neste artigo, usamos ASP.NET Core aplicativos Web e .NET Framework aplicativos de console.In this article, we use ASP.NET Core web apps and .NET Framework console apps.

Se você já tiver um projeto de um tipo com suporte, o Visual Studio poderá criar um Dockerfile e configurar seu projeto para ser executado em um contêiner.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. Consulte ferramentas de contêiner no Visual Studio.See Container Tools in Visual Studio.

Pré-requisitosPrerequisites

Para depurar aplicativos em um contêiner do Docker local, as seguintes ferramentas devem ser instaladas:To debug apps in a local Docker container, the following tools must be installed:

Para executar os contêineres do Docker localmente, você deve ter um cliente Docker local.To run Docker containers locally, you must have a local Docker client. Você pode usar Docker for Windows, que usa o Hyper-V e requer o Windows 10.You can use Docker for Windows, which uses Hyper-V and requires Windows 10.

Os contêineres do Docker estão disponíveis para projetos .NET Framework e .NET Core.Docker containers are available for .NET Framework and .NET Core projects. Vamos analisar dois exemplos.Let's look at two examples. Primeiro, examinamos um aplicativo Web .NET Core.First, we look at a .NET Core web app. Em seguida, examinamos um aplicativo de console .NET Framework.Then, we look at a .NET Framework console app.

Criar um aplicativo WebCreate a web app

Se você tiver um projeto e tiver adicionado o suporte do Docker, conforme descrito na visão geral, ignore esta seção.If you have a project and you've added Docker support as described in the overview, skip this section.

  1. No menu do Visual Studio, selecione arquivo > novo > projeto.In the Visual Studio menu, select File > New > Project.
  2. Na seção modelos da caixa de diálogo novo projeto , selecione Visual C# > Web.In the Templates section of the New Project dialog box, select Visual C# > Web.
  3. Selecione Aplicativo Web ASP.NET Core.Select ASP.NET Core Web Application.
  4. Insira um nome para o novo aplicativo (ou use o nome padrão) e, em seguida, selecione OK.Enter a name for your new application (or use the default name), and then select OK.
  5. Selecione aplicativo Web.Select Web Application.
  6. Marque a caixa de seleção habilitar suporte ao Docker .Select the Enable Docker Support check box.
  7. Selecione o tipo de contêiner desejado (Windows ou Linux) e, em seguida, selecione OK.Select the type of container you want (Windows or Linux), and then select OK.
  1. Na janela iniciar do Visual Studio, selecione criar um novo projeto.In the Visual Studio start window, select Create a new project.
  2. Selecione ASP.NET Core aplicativo Webe, em seguida, selecione Avançar.Select ASP.NET Core Web Application, and then select Next.
  3. Insira um nome para o novo aplicativo (ou use o nome padrão) e, em seguida, selecione criar.Enter a name for your new application (or use the default name), and then select Create.
  4. Selecione aplicativo Web.Select Web Application.
  5. Escolha se você deseja o suporte a SSL marcando ou desmarcando a caixa de seleção Configurar para https .Choose whether you want SSL support by selecting or clearing the Configure for HTTPS check box.
  6. Marque a caixa de seleção habilitar suporte ao Docker .Select the Enable Docker Support check box.
  7. Selecione o tipo de contêiner desejado (Windows ou Linux) e, em seguida, selecione criar.Select the type of container you want (Windows or Linux), and then select Create.

Editar seu código e atualizarEdit your code and refresh

Para iterar alterações rapidamente, você pode iniciar o aplicativo em um contêiner.To quickly iterate changes, you can start your application in a container. Em seguida, continue a fazer alterações, exibindo-as como você faria com IIS Express.Then, continue to make changes, viewing them as you would with IIS Express.

  1. Verifique se o Docker está configurado para usar o tipo de contêiner (Linux ou Windows) que você está usando.Make sure that Docker is set up to use the container type (Linux or Windows) that you are using. Clique com o botão direito do mouse no ícone do Docker na barra de tarefas e escolha alternar para contêineres do Linux ou alternar para contêineres do Windows conforme apropriado.Right-click on the Docker icon on the Taskbar, and choose Switch to Linux containers or Switch to Windows containers as appropriate.

  2. (Somente .NET Core 3 e posterior) Editar seu código e atualizar o site em execução, conforme descrito nesta seção, não está habilitado nos modelos padrão no .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. Para habilitá-lo, adicione o pacote NuGet Microsoft. AspNetCore. Mvc. Razor. RuntimeCompilation.To enable it, add the NuGet package Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. No Startup.cs, adicione uma chamada para o método de extensão IMvcBuilder.AddRazorRuntimeCompilation ao código no ConfigureServices método.In Startup.cs, add a call to the extension method IMvcBuilder.AddRazorRuntimeCompilation to the code in the ConfigureServices method. Você só precisa dessa habilitação no modo de depuração, portanto, codifique-o da seguinte maneira: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
    }
    

    Modifique o Startup método da seguinte maneira:Modify the Startup method as follows:

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

    Para obter mais informações, consulte compilação de arquivo Razor no ASP.NET Core.For more information, see Razor file compilation in ASP.NET Core.

  3. Defina a configuração da solução como depurar.Set Solution Configuration to Debug. Em seguida, pressione Ctrl + F5 para criar a imagem do Docker e executá-la localmente.Then, press Ctrl+F5 to build your Docker image and run it locally.

    Quando a imagem de contêiner é criada e executada em um contêiner do Docker, o Visual Studio inicia o aplicativo Web no navegador padrão.When the container image is built and running in a Docker container, Visual Studio launches the web app in your default browser.

  4. Vá para a página de índice .Go to the Index page. Vamos fazer alterações nessa página.We'll make changes on this page.

  5. Retorne ao Visual Studio e abra index. cshtml.Return to Visual Studio and open Index.cshtml.

  6. Adicione o seguinte conteúdo HTML ao final do arquivo e salve as alterações.Add the following HTML content to the end of the file, and then save the changes.

    <h1>Hello from a Docker container!</h1>
    
  7. Na janela saída, quando o Build do .NET for concluído e você vir as seguintes linhas, volte para o navegador e atualize a página: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.
    

As alterações foram aplicadas.Your changes have been applied!

Depurar com pontos de interrupçãoDebug with breakpoints

Geralmente, as alterações exigem uma inspeção mais detalhada.Often, changes require further inspection. Você pode usar os recursos de depuração do Visual Studio para essa tarefa.You can use the debugging features of Visual Studio for this task.

  1. No Visual Studio, abra index.cshtml.cs.In Visual Studio, open Index.cshtml.cs.

  2. Substitua o conteúdo do OnGet método pelo código a seguir:Replace the contents of the OnGet method with the following code:

        ViewData["Message"] = "Your application description page from within a container";
    
  3. À esquerda da linha de código, defina um ponto de interrupção.To the left of the code line, set a breakpoint.

  4. Para iniciar a depuração e atingir o ponto de interrupção, pressione F5.To start debugging and hit the breakpoint, press F5.

  5. Alterne para o Visual Studio para exibir o ponto de interrupção.Switch to Visual Studio to view the breakpoint. Inspecione os valores.Inspect values.

    Ponto de interrupção

Criar um aplicativo de console .NET FrameworkCreate a .NET Framework console app

Quando você usa .NET Framework projetos de aplicativo de console, não há suporte para a opção de adicionar suporte do Docker sem orquestração.When you use .NET Framework console app projects, the option to add Docker support without orchestration isn't supported. Você ainda pode usar o procedimento a seguir, mesmo se você estiver usando apenas um único projeto do Docker.You can still use the following procedure, even if you're using only a single Docker project.

  1. Crie um novo projeto de aplicativo de console .NET Framework.Create a new .NET Framework Console app project.
  2. Em Gerenciador de soluções, clique com o botão direito do mouse no nó do projeto e selecione Adicionar > suporte à orquestração de contêiner.In Solution Explorer, right-click the project node, and then select Add > Container Orchestration Support. Na caixa de diálogo que aparece, selecione Docker Compose.In the dialog box that appears, select Docker Compose. Um Dockerfile é adicionado ao seu projeto e um Docker Compose projeto com arquivos de suporte associados é adicionado.A Dockerfile is added to your project and a Docker Compose project with associated support files is added.

Depurar com pontos de interrupçãoDebug with breakpoints

  1. Em Gerenciador de Soluções, abra Program.cs.In Solution Explorer, open Program.cs.

  2. Substitua o conteúdo do Main método pelo código a seguir:Replace the contents of the Main method with the following code:

        System.Console.WriteLine("Hello, world!");
    
  3. Defina um ponto de interrupção à esquerda da linha de código.Set a breakpoint to the left of the code line.

  4. Pressione F5 para iniciar a depuração e atingir o ponto de interrupção.Press F5 to start debugging and hit the breakpoint.

  5. Alterne para o Visual Studio para exibir os valores de ponto de interrupção e inspecionar.Switch to Visual Studio to view the breakpoint and inspect values.

    Ponto de interrupção

Reutilização de contêinerContainer reuse

Durante o ciclo de desenvolvimento, o Visual Studio recria apenas as imagens de contêiner e o próprio contêiner quando você altera o Dockerfile.During the development cycle, Visual Studio rebuilds only your container images and the container itself when you change the Dockerfile. Se você não alterar o Dockerfile, o Visual Studio reutiliza o contêiner de uma execução anterior.If you don't change the Dockerfile, Visual Studio reuses the container from an earlier run.

Se você modificou manualmente o contêiner e deseja reiniciar com uma imagem de contêiner limpa, use o comando Compilar > limpar no Visual Studio e, em seguida, compile normalmente.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.

Solucionar problemasTroubleshoot

Saiba como solucionar problemas de desenvolvimento do Docker do Visual Studio.Learn how to troubleshoot Visual Studio Docker development.

Próximas etapasNext steps

Obtenha mais detalhes lendo como o Visual Studio cria aplicativos em contêineres.Get more details by reading How Visual Studio builds containerized apps.

Mais informações sobre o Docker com o Visual Studio, Windows e AzureMore about Docker with Visual Studio, Windows, and Azure