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
- Docker Desktop
- Visual Studio 2019 com a carga de trabalho Web Development, a carga de trabalho Ferramentas do Azure, e/ou a carga de trabalho desenvolvimento de plataforma cruzada .NET Core instalada
- Ferramentas de Desenvolvimento .NET Core para desenvolvimento com o .NET Core.
- Para publicar no Registo de Contêiner do Azure, é necessária uma assinatura do Azure. Inscreva-se para uma avaliação gratuita.
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ções de consola do .NET Framework não suportam a opção Adicionar suporte do Docker após a criação do projeto. Após a criação, tanto os projetos de console do .NET Framework quanto do .NET Core oferecem suporte à opção Add Container Orchestrator Support, utilizando o Service Fabric ou o Docker Compose.
No Visual Studio 2019, a partir da versão 16.4, a janela Contêineres está disponível, permitindo-lhe ver contêineres em execução, navegar por imagens disponíveis, ver variáveis de ambiente, logs e mapeamentos de porta, inspecionar o sistema de ficheiros, anexar um depurador ou abrir uma janela de terminal dentro do ambiente de contêiner. Consulte a janela de contêineres.
Pré-requisitos
- Docker Desktop
- Visual Studio 2022 com a Web Development, carga de trabalho de Ferramentas do Azure, e/ou carga de trabalho de desenvolvimento de desktop .NET instalada
- Para publicar no Registo de Contêiner do Azure, é necessária uma assinatura do Azure. Inscreva-se para uma avaliação gratuita.
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 Contêineres está disponível, 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. Consulte a janela de contêineres.
Observação
Os requisitos de licenciamento do Docker podem ser diferentes para diferentes versões do Docker Desktop. Consulte a documentação 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:
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 do Docker em Gerenciador de Soluções. Os comandos Add > Docker Support e Add > Container Orchestrator Support estão disponíveis no menu de contexto (botão direito do rato) do nó do projeto de um projeto ASP.NET Core no Solution Explorer, conforme ilustrado na captura de ecrã seguinte.
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 de pacote NuGet para 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-Docker
e 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.
Distro de Imagem de Contentor especifica qual imagem do sistema operativo os seus contentores usam como imagem 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 está predefinido para implantação Native Ahead-of-time (AOT) em projetos)
- 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 contentores baseados na imagem Ubuntu Chiseled e que usam implantação Native Ahead-of-time (AOT) só podem ser depurados no Modo Rápido. Consulte Personalizar os contentores do Docker no Visual Studio.
de contexto de compilação do Docker especifica a pasta usada 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 ficheiro .dockerignore
- uma referência de pacote NuGet para 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-Docker
e 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 versões posteriores com o SDK do .NET 7 instalado, em projetos ASP.NET Core destinados ao .NET 6 ou posterior, tem a opção de usar o suporte interno do SDK do .NET para construção de contêineres, o que significa que não necessita 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.
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.
Distro 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, o Container Image Distro é salvo 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 Containers permite visualizar contentores e imagens no seu computador e ver o que está a acontecer 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 (Ctrl+Q) e digitando containers
. 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 fazer check-out, execute seu aplicativo habilitado para Docker, abra a guia Arquivos e expanda a pasta aplicativo para ver seu aplicativo implantado no contêiner.
Para obter mais informações, consulte janela Usar os 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 para orquestração de contentores usando o Docker Compose, clique com o botão direito do rato no nó do projeto em Gerenciador de Soluçõese escolha Adicionar > Suporte para Orquestração de Contentores. Em seguida, escolha Docker Compose para gerenciar os contêineres.
Depois de adicionar suporte ao 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 Explorador de Soluções, conforme mostrado aqui:
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 de composição.
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 Crie o 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 Aplicativo do Azure
Implantar em Aplicativos de Contêiner do Azure usando o Visual Studio