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:

Captura de tela mostrando como habilitar o suporte do Docker para o novo aplicativo Web do ASP.NET Core no Visual Studio.

Captura de tela mostrando como habilitar o suporte do Docker para o novo aplicativo Web do ASP.NET Core no 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:

Captura de tela mostrando como adicionar a opção de menu Suporte do Docker no Visual Studio.

Captura de tela mostrando como adicionar a opção de menu Suporte do Docker no 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. Essa caixa de diálogo não aparece em projetos do .NET Framework ou do Azure Functions.

Na versão 17.11 e posterior, você também pode especificar a Distribuição de Imagem de Contêiner e o Contexto de Compilação do Docker.

Captura de tela mostrando a caixa de diálogo Opções de Scaffolding de Contêiner para adicionar suporte ao Docker.

A Distribuição de Imagem de Contêiner especifica qual imagem do sistema operacional seus contêineres usam como imagem base. Essa lista será alterada se você alternar entre Linux e Windows como tipo de contêiner.

As seguintes imagens estão disponíveis:

Windows:

  • Windows Nano Server (recomendado, disponível apenas na versão 8.0 e posterior, não predefinido para projetos de implantação AOT (Native Ahead-of-time))
  • Windows Server Core (disponível somente na versão 8.0 e posterior)

Linux:

  • Padrão (Debian, mas a tag é "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpine

Observação

Os contêineres baseados na imagem do Chiseled Ubuntu e que usam a implantação AOT (Native Ahead-of-time) só podem ser depurados no Modo Rápido. Consulte Personalizar contêineres do Docker no Visual Studio.

O Contexto de Compilação do Docker especifica a pasta que é usada para a compilação do Docker. Consulte Contexto de compilação do Docker. O padrão é a pasta da solução, o que é altamente recomendado. Todos os arquivos necessários para uma compilação precisam estar nessa pasta, o que geralmente não é o caso se você escolher a pasta do projeto ou alguma outra pasta.

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.

Captura de tela mostrando a caixa de diálogo Opções de Scaffolding de Contêiner para adicionar suporte ao Docker com o SDK do .NET selecionado como tipo de compilação de contêiner.

Aqui, escolha SDK do .NET como tipo de compilação de contêiner para usar o gerenciamento de contêineres do SDK do .NET em vez de um Dockerfile.

A Distribuição de Imagem de Contêiner especifica qual imagem do sistema operacional seus contêineres usam como imagem base. Essa lista será alterada se você alternar entre Linux e Windows como contêiner. Consulte a seção anterior para obter uma lista de imagens disponíveis.

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 configurações que teriam sido codificadas em um Dockerfile, como a imagem base do contêiner 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. Por exemplo, a Distribuição de Imagem de Contêiner é salva no arquivo de projeto como a propriedade ContainerBaseImage. Você pode alterá-la posteriormente editando o arquivo de projeto.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

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.

Captura de tela da janela Contêineres.

Captura de tela da janela Contêineres.

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:

Captura de tela dos arquivos do Docker no Gerenciador de Soluções no Visual Studio.

Captura de tela dos arquivos do Docker no Gerenciador de Soluções no 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