Compartilhar via


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, a depuração e a implantação para aplicativos em contêineres. Você pode trabalhar com um contêiner para um único projeto ou usar a orquestração de contêiner com o Docker Compose ou o Service Fabric para trabalhar com vários serviços em contêineres.

Pré-requisitos

Suporte do Docker no Visual Studio

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

O suporte para o Docker no Visual Studio foi alterado ao longo de várias 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 de acordo com o tipo de projeto e a versão do Visual Studio. Com alguns tipos de projeto com suporte, se você quiser apenas um contêiner para um único projeto, sem usar orquestração, poderá fazer isso adicionando suporte ao Docker. O próximo nível é o suporte à orquestração de contêineres, que adiciona arquivos de suporte apropriados para o orquestrador específico escolhido.

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.

Nota

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

No Visual Studio 2019 versão 16.4 e posterior, a janela Contêineres está disponível, o que permite 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 do Docker no Visual Studio

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

O suporte para o Docker no Visual Studio foi alterado ao longo de diversas versões em resposta às necessidades dos clientes. Há várias opções para adicionar suporte ao Docker a um projeto e as opções com suporte variam de acordo com o tipo de projeto e a versão do Visual Studio. Com alguns tipos de projeto com suporte, se você quiser apenas um contêiner para um único projeto, sem usar orquestração, poderá fazer isso adicionando suporte ao Docker. O próximo nível é o suporte à orquestração de contêineres, que adiciona arquivos de suporte apropriados para o orquestrador específico escolhido.

Com o Visual Studio 2022 versão 17.9 e posterior, quando você adiciona suporte ao Docker a um projeto .NET 7 ou posterior, você tem dois tipos de build de contêiner para escolher para adicionar suporte ao Docker. Você pode optar por adicionar um Dockerfile para especificar como criar as imagens de contêiner ou pode optar por usar o suporte interno de contêiner fornecido pelo SDK do .NET.

Além disso, com o Visual Studio 2022 e posterior, quando você escolhe a orquestração de contêiner, pode usar o Docker Compose ou o Service Fabric como serviços de orquestração de contêiner.

Nota

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

No Visual Studio 2022, a janela de contêineres está disponível, permitindo que você visualize contêineres em execução, procure imagens disponíveis, veja variáveis de ambiente, logs e mapeamentos de porta, inspecione o sistema de arquivos, conecte um depurador ou abra uma janela de terminal dentro do ambiente do contêiner. Confira Usar a janela Contêineres.

Nota

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 do Docker durante a criação do projeto selecionando Habilitar o suporte do Docker ao criar um novo projeto, conforme mostrado na captura de tela a seguir:

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.

Nota

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

Você pode adicionar suporte do Docker a um projeto existente selecionando Adicionar Suporte do Docker> no 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

Quando você adiciona ou habilita 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 foi nomeado WebApplication-Dockere 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 projetos do Azure Functions.

Nas versões 17.11 e posteriores, você também pode especificar a Distribuição de Imagem de Contêiner e o Contexto de Build do Docker.

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

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

As seguintes imagens estão disponíveis:

Windows:

  • Windows Nano Server (recomendado, disponível apenas para 8.0 e posteriores, não predefinido para projetos de implantação nativa AOT (Ahead-of-Time))
  • Windows Server Core (disponível apenas 8.0 e posterior)

Linux:

  • Padrão (Debian, só que a etiqueta é "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpino

Nota

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

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

Se você escolher 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 foi nomeado WebApplication-Dockere 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"]

Conteinerizar um aplicativo .NET sem um Dockerfile

Com o Visual Studio 2022 17.9 e posterior com o SDK do .NET 7 instalado, em projetos do ASP.NET Core destinados ao .NET 6 ou posterior, você tem a opção de usar o suporte interno do SDK do .NET para builds de contêineres, o que significa que você não precisa de um Dockerfile; consulte Conteinerizar um aplicativo .NET com dotnet publish. Em vez disso, você configura seus 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 o tipo de build do contêiner.

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

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

A entrada de construção de contêiner do SDK do .NET no launchSettings.json se assemelha ao 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 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 Personalizando seu contêiner. Por exemplo, a Distribuição de Imagem de Contêiner é salva no arquivo de projeto como a propriedade ContainerBaseImage. Você pode alterá-lo 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 em seu computador e ver o que está acontecendo com eles. Você pode exibir o sistema de arquivos, volumes montados, variáveis de ambiente, 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 verificar, execute seu aplicativo habilitado para Docker, abra a guia Arquivos e expanda a pasta do aplicativo para ver seu aplicativo implantado no contêiner.

captura de tela da janela Contêineres.

captura de tela da janela Contêineres.

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

Suporte ao Docker Compose

Quando quiser compor uma solução de vários contêineres usando o Docker Compose, adicione suporte ao orquestrador de contêineres aos seus projetos. Isso permite executar e depurar um grupo de contêineres (uma solução inteira ou um grupo de projetos) ao mesmo tempo se eles forem 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 do Docker Compose para gerenciar os contêineres.

Depois de adicionar suporte ao orquestrador de contêineres ao projeto, você verá um dockerfile adicionado ao projeto (se ainda não houver um) e uma pasta docker-compose adicionada à solução no Gerenciador de Soluções, conforme 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 docker-compose.yml já existir, o Visual Studio apenas adicionará as linhas necessárias do código de configuração a ele.

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

Se você trabalhar com um grande número de serviços, poderá economizar tempo e recursos de computação selecionando qual subconjunto de serviços deseja iniciar na sessão de depuração. Confira Iniciar um subconjunto de serviços do Compose.

Nota

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

Suporte do Service Fabric

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

O Visual Studio 2019 e posterior dá suporte ao desenvolvimento de microsserviços em contêineres usando contêineres do Windows e 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, consulte Service Fabric.

Entrega contínua e integração contínua (CI/CD)

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

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

Próximas etapas

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

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

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

Implantar no Serviço de Aplicativo do Azure

Implantar em Aplicativos de Contêiner do Azure usando o Visual Studio