Ferramentas de Contêiner do Visual Studio para Docker

As ferramentas incluídas no Visual Studio para desenvolvimento com contêineres do Docker são fáceis de usar e simplificam muito a criação, depuração e implantação de aplicativos em contêineres. Você pode trabalhar com um contêiner em um só projeto ou pode usar a orquestração de contêineres com o Docker Compose ou o Service Fabric para trabalhar com vários serviços em contêineres.

Pré-requisitos

Suporte ao Docker no Visual Studio

O suporte ao Docker está disponível para projetos do ASP.NET, projetos do ASP.NET Core e projetos de console .NET Core e .NET Framework.

O suporte ao Docker no Visual Studio foi alterado ao longo das versões em resposta às necessidades dos clientes. Há dois níveis de suporte do Docker que você pode adicionar a um projeto, e as opções com suporte variam conforme o tipo de projeto e a versão do Visual Studio. Com alguns tipos de projeto com suporte, adicione o suporte do Docker se você quiser apenas um contêiner para um único projeto, sem o uso de orquestração. O próximo nível é o suporte à orquestração de contêiner, que adiciona os arquivos de suporte apropriados para o orquestrador específico que você escolher.

Com o Visual Studio 2019, você pode usar o Docker Compose, o Kubernetes e o Service Fabric como serviços de orquestração de contêiner.

Observação

Ao criar um projeto de console do .NET Framework ou do .NET Core, não há nenhuma opção para Adicionar suporte do Docker. Após um projeto de aplicativo de console do .NET Core ser criado, a opção Adicionar suporte do Docker estará disponível. Projetos de aplicativo de console do .NET Framework não dão suporte à opção Adicionar suporte do Docker após a criação do projeto. Após a criação, projetos de console do .NET Framework ou do .NET Core dão suporte à opção Adicionar Suporte do Orquestrador de Contêineres usando o Service Fabric ou o Docker Compose.

No Visual Studio 2019 versão 16.4 e posteriores, a janela Contêineres está disponível, permitindo exibir contêineres em execução, procurar imagens disponíveis, exibir variáveis de ambiente, logs e mapeamentos de porta, inspecionar o sistema de arquivos, anexar um depurador ou abrir uma janela de terminal dentro do ambiente de contêiner. Confira Usar a janela Contêineres.

Pré-requisitos

Suporte ao Docker no Visual Studio

O suporte ao Docker está disponível para projetos do ASP.NET, projetos do ASP.NET Core e projetos de console .NET Core e .NET Framework.

O suporte ao Docker no Visual Studio foi alterado ao longo das versões em resposta às necessidades dos clientes. Existem diversas maneiras de adicionar suporte ao Docker em um projeto, e as opções compatíveis variam conforme o tipo de projeto e a versão do Visual Studio. Com alguns tipos de projeto com suporte, adicione o suporte do Docker se você quiser apenas um contêiner para um único projeto, sem o uso de orquestração. O próximo nível é o suporte à orquestração de contêiner, que adiciona os arquivos de suporte apropriados para o orquestrador específico que você escolher.

A partir da versão 17.9 do Visual Studio 2022, ao adicionar suporte ao Docker em projetos .NET 7 ou mais recentes, você pode escolher entre dois tipos de build de contêiner para adicionar suporte ao Docker. Você pode optar por adicionar um Dockerfile para especificar como criar as imagens de contêiner, ou usar o suporte integrado ao contêiner fornecido pelo SDK do .NET.

Além disso,com o Visual Studio 2022 em diante,ao escolher um contêiner de orquestração, você pode usar o Docker Compose ou o Service Fabric como serviço de orquestração de contêineres.

Observação

Se você está usando o modelo de projeto de console de .NET Framework completo, a opção com suporte é Adicionar suporte ao Orquestrador de Contêineres após a criação do projeto, com opções para usar o Service Fabric ou o Docker Compose. Adicionar suporte na criação do projeto e Adicionar suporte do Docker para um só projeto sem orquestração não são opções disponíveis.

No Visual Studio 2022, a janela Contêineres está disponível, permitindo exibir contêineres em execução, procurar imagens disponíveis, exibir variáveis de ambiente, logs e mapeamentos de porta, inspecionar o sistema de arquivos, anexar um depurador ou abrir uma janela de terminal dentro do ambiente de contêiner. Confira Usar a janela Contêineres.

Observação

Os requisitos de licenciamento do Docker podem ser diferentes para versões diferentes do Docker Desktop. Consulte a documentação do Docker para entender os requisitos atuais de licenciamento para usar sua versão do Docker Desktop para desenvolvimento em sua situação.

Adicionando suporte ao Docker

Você pode habilitar o suporte ao Docker durante a criação do projeto selecionando Habilitar suporte ao Docker ao criar um novo projeto, conforme mostrado na seguinte captura de tela:

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Screenshot showing how to enable Docker Support for new ASP.NET Core web app in Visual Studio.

Observação

Para projetos do .NET Framework (não o .NET Core), apenas contêineres do Windows estão disponíveis.

Para adicionar suporte ao Docker para um projeto existente, selecione Adicionar>Suporte ao Docker em Gerenciador de Soluções. Os comandos Adicionar > Suporte do Docker e Adicionar > Suporte do Orquestrador de Contêineres estão localizados no menu de clique com o botão direito (ou menu de contexto) do nó do projeto para um projeto do ASP.NET Core no Gerenciador de Soluções, conforme mostrado na seguinte captura de tela:

Screenshot showing how to add Docker Support menu option in Visual Studio.

Screenshot showing how to add Docker Support menu option in Visual Studio.

Adicionar suporte ao Docker

Ao adicionar ou habilitar o suporte ao Docker, o Visual Studio adiciona o seguinte ao projeto:

  • um arquivo Dockerfile
  • um arquivo .dockerignore
  • uma referência de pacote do NuGet para o Microsoft.VisualStudio.Azure.Containers.Tools.Targets

O Dockerfile adicionado será semelhante ao código a seguir. Neste exemplo, o projeto recebeu o nome WebApplication-Docker e você escolheu contêineres do Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

Adicionar suporte ao Docker usando o tipo de build de contêiner do Dockerfile

Quando você adiciona ou habilita o suporte ao Docker em um projeto .NET 7 ou posterior, o Visual Studio mostra a caixa de diálogo Opções de Scaffolding de Contêiner, permitindo escolher a opção de sistema operacional (Linux ou Windows) e o tipo de build de contêiner, seja Dockerfile ou SDK do .NET.

Se optar pelo Dockerfile, o Visual Studio adicionará o seguinte ao projeto:

  • um arquivo Dockerfile
  • um arquivo .dockerignore
  • uma referência de pacote do NuGet para o Microsoft.VisualStudio.Azure.Containers.Tools.Targets

O Dockerfile adicionado será semelhante ao código a seguir. Neste exemplo, o projeto recebeu o nome WebApplication-Docker e você escolheu contêineres do Linux:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication-Docker/WebApplication-Docker.csproj", "WebApplication-Docker/"]
RUN dotnet restore "WebApplication-Docker/WebApplication-Docker.csproj"
COPY . .
WORKDIR "/src/WebApplication-Docker"
RUN dotnet build "WebApplication-Docker.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

Adicionar suporte ao Docker usando a opção SDK do .NET

A partir da versão 17.9 do Visual Studio 2022 com o SDK do .NET 7 instalado, projetos do ASP.NET Core destinados ao .NET 6 ou posterior podem usar o suporte interno do SDK do .NET para builds de contêiner, eliminando a necessidade de um Dockerfile; confira Conteinerizar um aplicativo .NET com o dotnet publish. Em vez disso, você configura os contêineres usando as propriedades do MSBuild no arquivo de projeto, e as configurações para iniciar os contêineres com o Visual Studio são codificadas em um arquivo de configuração .json, launchSettings.json.

Screenshot showing the Container Scaffolding Options dialog for adding Docker support.

A entrada de build de contêiner do SDK do .NET no launchSettings.json se parece com o seguinte código:

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

O SDK do .NET gerencia algumas das opções que seriam codificadas em um Dockerfile, como a imagem base do contêiner escolhida para corresponder à versão de destino do .NET e as variáveis de ambiente a serem definidas. As configurações disponíveis no arquivo de projeto para configuração de contêiner são listadas em Personalização do contêiner.

Usar a janela Contêineres

A janela Contêineres permite exibir contêineres e imagens no computador e ver o que está acontecendo com eles. Você pode exibir o sistema de arquivos, os volumes montados, as variáveis de ambiente, as portas usadas e examinar arquivos de log.

Abra a janela Contêineres usando o início rápido (Ctrl+Q) e digitando containers. Você pode usar os controles de encaixe para colocar a janela em algum lugar. Devido à largura da janela, ela funciona melhor quando encaixada na parte inferior da tela.

Selecione um contêiner e use as guias para exibir as informações disponíveis. Para conferir, execute o aplicativo habilitado para Docker, abra a guia Arquivos e expanda a pasta do aplicativo para ver o aplicativo implantado no contêiner.

Screenshot of Containers window.

Screenshot of Containers window.

Para obter mais informações, consulte Usar a janela Contêineres.

Suporte ao Docker Compose

Se você deseja compor uma solução de vários contêineres usando Docker Compose, adicione suporte para o orquestrador de contêineres aos seus projetos. Isso permite que você execute e depure um grupo de contêineres (uma solução inteira ou um grupo de projetos) ao mesmo tempo se eles estiverem definidos no mesmo arquivo docker-compose.yml.

Para adicionar suporte ao orquestrador de contêineres usando Docker Compose, clique com o botão direito do mouse no nó do projeto no Gerenciador de Soluções e escolha Adicionar > Suporte ao Orquestrador de Contêineres. Em seguida, escolha Docker Compose para gerenciar os contêineres.

Depois de adicionar o suporte ao orquestrador de contêineres ao projeto, você verá um Dockerfile adicionado ao projeto (se já não houver um lá) e uma pasta docker-compose adicionada à solução no Gerenciador de Soluções, como mostrado aqui:

Screenshot of Docker files in Solution Explorer in Visual Studio.

Screenshot of Docker files in Solution Explorer in Visual Studio.

Se o docker-compose.yml já existir, o Visual Studio adiciona nele apenas as linhas necessárias do código de configuração.

Repita o processo com os outros projetos que você deseja controlar usando o Docker Compose.

Se você trabalha com um grande número de serviços, pode economizar tempo e recursos de computação selecionando qual subconjunto de serviços deseja iniciar em sua sessão de depuração. Consulte Iniciar um subconjunto de serviços do Compose.

Observação

Observe que não há suporte para hosts remotos do Docker nas ferramentas do Visual Studio.

Suporte ao Service Fabric

Com as ferramentas do Service Fabric no Visual Studio, você pode desenvolver e depurar no Azure Service Fabric, executar e depurar localmente, e implantar no Azure.

O Visual Studio 2019 e posterior são suporte ao desenvolvimento de microsserviços em contêineres usando os contêineres do Windows e a orquestração do Service Fabric.

Para obter um tutorial detalhado, consulte Tutorial: implantar um aplicativo .NET em um contêiner do Windows no Azure Service Fabric.

Para obter mais informações sobre o Azure Service Fabric, confira o Service Fabric.

Integração contínua e implantação contínua (CI/CD)

O Visual Studio conecta-se prontamente com o Azure Pipelines para integração contínua e automatizada e para a entrega de alterações na configuração e código de serviço. Para iniciar, confira Criar seu primeiro pipeline.

Para o Service Fabric, consulte Tutorial: implantar um aplicativo ASP.NET Core no Azure Service Fabric usando o Azure DevOps Projects.

Próximas etapas

Para obter mais detalhes sobre os serviços de implementação e uso de ferramentas do Visual Studio para trabalhar com contêineres, leia os seguintes artigos:

Depuração de aplicativos em um contêiner de Docker local

Implantar um contêiner ASP.NET em um registro de contêiner usando o Visual Studio