Compartilhar via


Adicionar suporte para contêineres

Você pode adicionar suporte para contêineres do Docker em tipos de projeto do Visual Studio compatíveis, como ASP.NET projetos Web e outros. Consulte a visão geral para obter informações sobre tipos de projeto com suporte em sua versão do Visual Studio.

Você pode adicionar suporte para contêineres do Docker ou podman em tipos de projeto do Visual Studio compatíveis, como ASP.NET projetos Web e outros. Consulte a visão geral para obter informações sobre tipos de projeto com suporte em sua versão do Visual Studio.

Pré-requisitos

Pré-requisitos

Adicionar suporte ao contêiner ao criar um projeto

Você pode habilitar o suporte para contêineres durante a criação do projeto selecionando Habilitar suporte ao contêiner ao criar um novo projeto, conforme mostrado na captura de tela a seguir:

Captura de tela mostrando como habilitar o suporte de contêiner para o novo aplicativo Web ASP.NET Core no Visual Studio.

Observação

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

Observação

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 na criação do projeto e adicionar suporte ao Docker para um único projeto sem orquestração não são opções disponíveis.

Observação

O suporte para contêineres do .NET Framework é descontinuado na versão atual do Visual Studio. Os contêineres do .NET Framework tinham suporte até o Visual Studio 2022 17.14.

Adicionar suporte de contêiner a um projeto existente

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

Captura de tela mostrando a opção de menu Adicionar Suporte ao Contêiner no Visual Studio.

Escolha o tipo de build de contêiner e outras opções

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

Você também pode especificar a Distro de Imagem de Contêiner e o Contexto de Construção do Contêiner.

Captura de tela da janela de opções de scaffolding para adicionar suporte a contêineres.

A Distribuição de Imagem de Contêiner especifica qual imagem do sistema operacional seus 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 a versão 8.0 e posteriores, não predefinido para projetos de implantação AOT (Ahead-of-time) nativo)
  • Windows Server Core (disponível apenas 8.0 e posterior)

Linux:

  • Padrão (Debian, mas a tag corresponde à versão .NET que você está usando)
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpino

Observação

Contêineres baseados na imagem Chiseled Ubuntu e que usam Native Ahead-of-Time (AOT) deployment só podem ser depurados no Modo Rápido. Consulte Personalizar contêineres do Docker no Visual Studio.

O Contexto de Construção de Contêiner especifica a pasta usada para docker build (ou podman build). Consulte o contexto de build do Docker ou o build do Podman. O padrão é a pasta da solução, que é recomendada. Todos os arquivos necessários para um build precisam estar nessa pasta, o que não é o caso se você escolher a pasta do projeto ou alguma outra pasta.

Tipo de compilação de contêiner do Dockerfile

Se você escolher o tipo de build de contêiner do Dockerfile , o Visual Studio adicionará o seguinte ao projeto:

  • um arquivo dockerfile
  • um .dockerignore arquivo
  • uma referência de pacote NuGet para 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/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081


# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj", "WebApplication15-AddContainerSupport/"]
RUN dotnet restore "./WebApplication15-AddContainerSupport/WebApplication15-AddContainerSupport.csproj"
COPY . .
WORKDIR "/src/WebApplication15-AddContainerSupport"
RUN dotnet build "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./WebApplication15-AddContainerSupport.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication15-AddContainerSupport.dll"]

Tipo de build de contêiner do SDK do .NET

Você pode usar o suporte incorporado do SDK do .NET para criação de contêineres, o que significa que não é necessário um Dockerfile; consulte Containerize 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 .json arquivo de configuração, launchSettings.json.

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

Aqui, escolha o SDK do .NET como o tipo de build de contêiner para usar o gerenciamento de contêiner 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 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 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 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 na Personalização do contêiner. Por exemplo, a Distribuição de Imagem de Contêiner é salva como a propriedade ContainerBaseImage no arquivo de projeto. Você pode alterá-lo posteriormente editando o arquivo de projeto.

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

Escolha o tipo de build de contêiner e outras opções

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

Na versão 17.11 e posterior, 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.

A Distribuição de Imagem de Contêiner especifica qual imagem do sistema operacional seus 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 a versão 8.0 e posteriores, não predefinido para projetos de implantação AOT (Ahead-of-time) nativo)
  • Windows Server Core (disponível apenas 8.0 e posterior)

Linux:

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

Observação

Contêineres baseados na imagem Chiseled Ubuntu e que usam Native Ahead-of-Time (AOT) deployment 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. Consulte o contexto de construção do Docker. O padrão é a pasta da solução, que é recomendada. Todos os arquivos necessários para um build precisam estar nessa pasta, o que não é o caso se você escolher a pasta do projeto ou alguma outra pasta.

Tipo de compilação de contêiner do Dockerfile

Se você escolher o tipo de build de contêiner do Dockerfile , o Visual Studio adicionará o seguinte ao projeto:

  • um arquivo dockerfile
  • um .dockerignore arquivo
  • uma referência de pacote NuGet para 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:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.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"]

Tipo de build de contêiner do SDK do .NET

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êiner, o que significa que você não precisa de um Dockerfile; consulte Containerize um aplicativo .NET com a publicação do dotnet. 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 .json arquivo de configuração, launchSettings.json.

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

Aqui, escolha o SDK do .NET como o tipo de build de contêiner para usar o gerenciamento de contêiner 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 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 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 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 na Personalização do contêiner. Por exemplo, a Distribuição de Imagem de Contêiner é salva como a propriedade ContainerBaseImage no arquivo de projeto. Você pode alterá-lo posteriormente editando o arquivo de projeto.

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

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:

Docker no Visual Studio

Depurando aplicativos em um contêiner 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