Partilhar 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, depuração e implantação de aplicativos em contêineres. Você pode trabalhar com um contêiner para um único projeto ou 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 ASP.NET, projetos ASP.NET Core e projetos de console do .NET Core e do .NET Framework.

O suporte para Docker no Visual Studio foi alterado ao longo de várias versões em resposta às necessidades do cliente. Há dois níveis de suporte ao 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 suportados, 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 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êineres.

Observação

Ao criar um projeto de console do .NET Framework ou do .NET Core, não há nenhuma opção para o suporte Adicionar Docker. Depois que um projeto de aplicativo de console do .NET Core é criado, a opção de suporte Adicionar Docker está disponível. Os projetos de aplicação de consola do .NET Framework não suportam a opção Adicionar suporte ao Docker depois de o projeto ser criado. Após a criação, tanto os projetos de console do .NET Framework quanto do .NET Core suportam a opção Adicionar Suporte a Orquestradores de Contêiner usando o Service Fabric ou o Docker Compose.

No Visual Studio 2019 versão 16.4 e posterior, a janela Contentores está disponível, permitindo visualizar contentores em execução, explorar imagens disponíveis, apresentar variáveis de ambiente, logs e mapeamentos de portas, inspecionar o sistema de ficheiros, ligar um depurador ou abrir uma janela de terminal dentro do ambiente de contentor. Consulte Use a janela Contêineres.

Pré-requisitos

Suporte ao Docker no Visual Studio

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

O suporte para Docker no Visual Studio foi alterado ao longo de várias versões em resposta às necessidades do cliente. 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 suportados, 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 que você escolher.

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 compilação 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 de contêiner interno fornecido pelo SDK do .NET.

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

Observação

Se você estiver usando o modelo de projeto de console completo do .NET Framework, a opção suportada é Suporte para Adicionar 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 na criação do projeto e de suporte Adicionar Docker para um único projeto sem orquestração não são opções disponíveis.

No Visual Studio 2022, a janela Contentores está disponível, permitindo ver contentores em execução, procurar imagens disponíveis, visualizar variáveis de ambiente, registos e mapeamentos de portas, inspecionar o sistema de ficheiros, anexar um depurador ou abrir uma janela de terminal dentro do ambiente de contentor. Consulte Use a janela de contentores.

Observação

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

Adicionando suporte ao Docker

Você pode habilitar o suporte ao Docker durante a criação do projeto selecionando Ativar de Suporte ao 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 ASP.NET Core no Visual Studio.

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

Observação

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

Você pode adicionar suporte ao Docker a um projeto existente selecionando Adicionar>Suporte ao Docker no Gerenciador de Soluções. Os comandos Add > Docker Support e Add > Container Orchestrator Support estão localizados no menu do botão direito (ou menu de contexto) do nó do projeto para um projeto ASP.NET Core no Solution Explorer, conforme mostrado na captura de ecrã a seguir:

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 ficheiro .dockerignore
  • uma referência ao pacote NuGet para o Microsoft.VisualStudio.Azure.Containers.Tools.Targets

O Dockerfile que você adicionar será semelhante ao código a seguir. Neste exemplo, o projeto foi nomeado WebApplication-Dockere você escolheu contêineres 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 compilação de contêiner Dockerfile

Quando você adiciona ou habilita o suporte ao Docker a um projeto .NET 7 ou posterior, o Visual Studio mostra a caixa de diálogo Opções de Andaime de Contêiner , que oferece a opção de sistema operacional (Linux ou Windows), mas também a capacidade de escolher o tipo de compilação de contêiner, Dockerfile ou SDK do .NET. Essa caixa de diálogo não aparece em projetos do .NET Framework ou projetos do Azure Functions.

Na versão 17.11 e posterior, você também pode especificar o Container Image Distro e o Docker Build Context.

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

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

Estão disponíveis as seguintes imagens:

Windows

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

Linux:

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

Observação

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

O Docker Build Context especifica a pasta utilizada para a compilação do Docker. Consulte contexto de compilação do Docker. O padrão é a pasta da solução, que é altamente recomendada. Todos os arquivos necessários para uma compilação precisam estar sob esta 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 NuGet para o Microsoft.VisualStudio.Azure.Containers.Tools.Targets

O Dockerfile que você adicionar será semelhante ao código a seguir. Neste exemplo, o projeto foi nomeado WebApplication-Dockere você escolheu contêineres 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"]

Contentorizar uma aplicação .NET sem um Dockerfile

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

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

Distribuição de Imagem de Contentor especifica qual imagem do sistema operativo os seus contentores usam como imagem base. Esta lista muda se você alternar entre Linux e Windows como o contêiner. Consulte a secção anterior para obter uma lista das imagens disponíveis.

A entrada de compilação do contêiner do SDK do .NET no launchSettings.json se parece com o código a seguir:

"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 estão listadas em Personalizando seu contêiner. Por exemplo, a Container Image Distro está guardada no arquivo de projeto como a propriedade ContainerBaseImage. Você pode alterá-lo mais tarde editando o arquivo de projeto.

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

Utilizar a janela Contentores

A janela Contentores permite visualizar contentores e imagens na sua máquina e ver o que está acontecendo com eles. Você pode visualizar o sistema de arquivos, os volumes montados, as variáveis de ambiente, as portas usadas e examinar os arquivos de log.

Abra a janela Containers usando o início rápido (CtrlQ) e digitando . Você pode usar os controles de encaixe para colocar a janela em algum lugar. Devido à largura da janela, ele funciona melhor quando encaixado na parte inferior da tela.

Selecione um contêiner e use as guias para exibir as informações disponíveis. Para verificar, execute a aplicação habilitada para Docker, abra o separador Arquivos e expanda a pasta aplicação para ver a sua aplicação implantada no contêiner.

Captura de tela da janela Contêineres.

Captura de tela da janela Contêineres.

Para obter mais informações, consulte Utilizar a janela de 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 estiverem definidos no mesmo arquivo docker-compose.yml.

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

Depois de adicionar suporte do orquestrador de contentores ao seu projeto, 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 de arquivos do Docker no Gerenciador de Soluções no Visual Studio.

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

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

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 Compose.

Observação

Observe que os hosts remotos do Docker não são suportados nas ferramentas do Visual Studio.

Suporte ao 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 versões posteriores oferecem 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 com o Azure Pipelines para integração automatizada e contínua e entrega de alterações ao seu código de serviço e configuração. Para começar, consulte 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óximos passos

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 aplicações num contentor Docker local

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

Implantar no Serviço de Aplicações do Azure

Implementar nos Azure Container Apps usando o Visual Studio