Início Rápido: Docker no Visual Studio

Com o Visual Studio, você pode facilmente criar, depurar e executar aplicativos do .NET, ASP.NET e ASP.NET Core em contêineres e publicá-los no Registro de Contêiner do Azure, no Docker Hub, no Serviço de Aplicativo do Azure ou no seu próprio Registro de Contêiner. Neste artigo, publicaremos um aplicativo ASP.NET Core para Registro de Contêiner do Azure.

Pré-requisitos

Instalação e configuração

Para a instalação do Docker, primeiro examine as informações em Docker Desktop for Windows: What to know before you install (Docker para Windows: o que saber antes de instalar). Em seguida, instale o Docker Desktop.

Adicionar um projeto a um contêiner do Docker

  1. Crie um novo projeto usando o modelo ASP.NET Core Web App ou, se quiser usar o .NET Framework em vez do .NET Core, escolha ASP.NET Aplicativo Web (.NET Framework).

  2. Na tela Criar novo aplicativo Web, verifique se a caixa de seleção Habilitar Suporte ao Docker está marcada.

    Captura de tela da caixa de seleção Habilitar Suporte do Docker.

    A captura de tela mostra o .NET Core; se você estiver usando .NET Framework, ela parecerá um pouco diferente.

  3. Selecione o tipo de contêiner desejado (Windows ou Linux) e clique em Criar.

Visão geral do Dockerfile

Um Dockerfile, ou seja, a receita para criar uma imagem final do Docker, é criado no projeto. Confira a referência do Dockerfile para entender os comandos que ele contém:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

O Dockerfile anterior baseia-se na imagem microsoft/aspnetcore e inclui instruções para modificar a imagem base criando o projeto e adicionando-o ao contêiner. Se você estiver usando o .NET Framework, a imagem base será diferente.

Quando a caixa de seleção Configurar para HTTPS do diálogo do novo projeto estiver marcada, o Dockerfile exibirá duas portas. Uma porta é usada para o tráfego HTTP; a outra porta é usada para o HTTPS. Se a caixa de seleção não estiver marcada, uma única porta (80) será exposta para o tráfego HTTP.

Depurar

Selecione Docker na lista suspensa de depuração na barra de ferramentas e inicie a depuração do aplicativo. Poderá aparecer uma mensagem com um aviso sobre a confiança em um certificado, escolha confiar no certificado para continuar.

A opção Ferramentas de Contêiner na janela Saída mostra quais ações estão ocorrendo. Na primeira vez, pode levar algum tempo para baixar a imagem base, mas é muito mais rápido em execuções subsequentes.

Observação

Se você precisar alterar as portas para depuração, poderá fazer isso no arquivo launchSettings.json. Consulte Configurações de inicialização de contêiner.

Janela Contêineres

Se você tiver o Visual Studio 2019 versão 16.4 ou posterior, poderá usar a janela Contêineres para exibir contêineres em execução no computador, bem como imagens disponíveis.

Abra a janela Contêineres usando a caixa de pesquisa no IDE (pressione Ctrl+Q para usá-la), digite containere escolha a janela Contêineres na lista.

Você pode montar a janela Contêineres em um local conveniente, como abaixo do editor, movendo-a e seguindo as guias de posicionamento da janela.

Na janela, localize o contêiner e percorra cada guia para exibir as variáveis de ambiente, os mapeamentos de porta, os logs e o sistema de arquivos.

Captura de tela da janela Contêineres.

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

Publicar imagens do Docker

Depois que o ciclo de desenvolvimento e de depuração do aplicativo forem concluídos, você poderá criar uma imagem de produção do aplicativo.

  1. Altere a lista suspensa de configuração para Versão e compile o aplicativo.

  2. Clique com o botão direito no projeto em Gerenciador de Soluções e escolha Publicar.

  3. Na caixa de diálogo Publicar, selecione a guia do Registro de Contêiner do Docker.

    Captura de tela da caixa de diálogo Publicar – escolha o Registro de Contêiner do Docker.

  4. Escolha Criar um novo Registro de Contêiner do Azure.

    Captura de tela da caixa de diálogo Publicar – escolha Criar um Registro de Contêiner do Azure.

  5. Preencha os valores desejados em Criar um novo Registro de Contêiner do Azure.

    Configuração Valor sugerido Descrição
    Prefixo DNS Nome globalmente exclusivo Nome que identifica exclusivamente o registro de contêiner.
    Assinatura Escolha sua assinatura A assinatura do Azure a utilizar.
    Grupo de Recursos myResourceGroup Nome do grupo de recursos no qual criar o registro de contêiner. Escolha Novo para criar um novo grupo de recursos.
    SKU Standard Camada de serviço do registro de contêiner
    Local do Registro Um local próximo Escolha um Local em uma região próxima a você ou perto de outros serviços que usarão o registro de contêiner.

    Captura de tela da caixa de diálogo criar Registro de Contêiner do Azure do Visual Studio.

  6. Clique em Criar. A caixa de diálogo Publicar agora mostra o registro criado.

    Captura de tela da caixa de diálogo Publicar mostrando Registro de Contêiner do Azure criado.

  7. Escolha Concluir para concluir o processo de publicação da imagem de contêiner no registro recém-criado no Azure.

    Captura de tela mostrando a publicação bem-sucedida.

Próximas etapas

Agora, é possível extrair o contêiner do registro para qualquer host capaz de executar imagens do Docker, por exemplo Instâncias de Contêiner do Azure.

Com o Visual Studio, você pode facilmente criar, depurar e executar aplicativos do .NET, ASP.NET e ASP.NET Core em contêineres e publicá-los no Registro de Contêiner do Azure, no Docker Hub, no Serviço de Aplicativo do Azure ou no seu próprio Registro de Contêiner. Neste artigo, você publicará um aplicativo ASP.NET Core para Registro de Contêiner do Azure.

Pré-requisitos

Instalação e configuração

Para a instalação do Docker, primeiro examine as informações em Docker Desktop for Windows: What to know before you install (Docker para Windows: o que saber antes de instalar). Em seguida, instale o Docker Desktop.

Adicionar um projeto a um contêiner do Docker

  1. Antes de criar o projeto do Visual Studio, verifique se o Docker Desktop está executando o tipo de contêineres (Windows ou Linux) que você pretende usar em seu projeto do Visual Studio.

    Para alterar o tipo de contêiner usado pelo Docker Desktop, clique com o botão direito do mouse no ícone do Docker (baleia) na Barra de Tarefas e escolha Alternar para contêineres do Linux ou Alternar para contêineres do Windows.

    Aviso

    Se você alternar o tipo de contêiner depois de criar o projeto do Visual Studio, os arquivos de imagem do Docker poderão falhar ao carregar.

  2. Crie um novo projeto usando o modelo ASP.NET Core Web App ou, se quiser usar o .NET Framework em vez do .NET Core, escolha ASP.NET Aplicativo Web (.NET Framework).

  3. Na tela Criar novo aplicativo Web, verifique se a caixa de seleção Habilitar Suporte ao Docker está marcada.

    Captura de tela da caixa de seleção Habilitar Suporte do Docker.

    A captura de tela mostra a versão mais recente com o .NET 8.0. Se você estiver usando o .NET Framework, a caixa de diálogo será um pouco diferente.

  4. Selecione o tipo de contêiner desejado (Windows ou Linux) e selecione Criar.

Visão geral do Dockerfile

O Visual Studio cria um Dockerfile em seu projeto, que fornece a receita de como criar uma imagem final do Docker. Para obter mais informações, consulte a referência do Dockerfile para obter detalhes sobre os comandos usados no Dockerfile.

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

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

O Dockerfile anterior baseia-se na imagem do .NET 8 do MCR (Registro de Contêiner do Azure) e inclui instruções para modificar a imagem de base, criando o projeto chamado MyWebApp e adicionando-o ao contêiner. Se você estiver usando o .NET Framework, a imagem base será diferente.

Quando a caixa de seleção Configurar para HTTPS do diálogo do novo projeto estiver marcada, o Dockerfile exibirá duas portas. Uma porta é usada para o tráfego HTTP; a outra porta é usada para o HTTPS. Se a caixa de seleção não estiver marcada, uma única porta (80) será exposta para o tráfego HTTP.

Com o Visual Studio 2022 versão 17.7 ou posterior, você pode direcionar para o .NET 8. Nesse caso, você tem o benefício de poder executar seu aplicativo com mais segurança, como um usuário normal, em vez de com permissões elevadas. O Dockerfile padrão gerado pelo Visual Studio para projetos do .NET 8 está configurado para ser executado como um usuário normal. Para habilitar esse computador em um projeto existente, adicione a linha USER app ao Dockerfile na imagem base. Além disso, como a porta 80 é restrita para usuários normais, exponha as portas 8080 e 8081 em vez de 80 e 443. A porta 8080 é usada para tráfego HTTP e a porta 8081 é usada para HTTPS. Para ser executado como um usuário normal, o contêiner deve usar uma imagem base do .NET 8 e o aplicativo deve ser executado como um aplicativo .NET 8. Quando configurado corretamente, o Dockerfile deve conter um código como no exemplo a seguir:

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

Depurar

Selecione Docker na lista suspensa de depuração na barra de ferramentas e inicie a depuração do aplicativo. Poderá aparecer uma mensagem com um aviso sobre a confiança em um certificado, escolha confiar no certificado para continuar.

A opção Ferramentas de Contêiner na janela Saída mostra quais ações estão ocorrendo. Na primeira vez, pode levar algum tempo para baixar a imagem base, mas é mais rápido em execuções subsequentes.

Depois que o build for concluído, o navegador será aberto e exibirá a página inicial do aplicativo. Na barra de endereços do Browser, você pode ver a URL do localhost e o número da porta para depuração.

Observação

Se você precisar alterar as portas para depuração, poderá fazer isso no arquivo launchSettings.json. Consulte Configurações de inicialização de contêiner.

Janela Contêineres

Você pode usar a janela Contêineres para exibir contêineres em execução em seu computador, bem como imagens disponíveis.

Abra a janela Contêineres usando a caixa de pesquisa no IDE (pressione Ctrl+Q para usá-la), digite containere escolha a janela Contêineres na lista.

Você pode montar a janela Contêineres em um local conveniente, como abaixo do editor, movendo-a e seguindo as guias de posicionamento da janela.

Na janela, localize o contêiner e percorra cada guia para exibir as variáveis de ambiente, os mapeamentos de porta, os logs e o sistema de arquivos.

Captura de tela da janela Contêineres.

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

Publicar imagens do Docker

Depois que o ciclo de desenvolvimento e de depuração do aplicativo forem concluídos, você poderá criar uma imagem de produção do aplicativo.

  1. Altere a lista suspensa de configuração para Versão e compile o aplicativo.

  2. Clique com o botão direito no projeto em Gerenciador de Soluções e escolha Publicar.

  3. Na caixa de diálogo Publicar, selecione a guia do Registro de Contêiner do Docker.

    Captura de tela da caixa de diálogo Publicar – escolha o Registro de Contêiner do Docker.

  4. Escolha Criar um novo Registro de Contêiner do Azure.

    Captura de tela da caixa de diálogo Publicar – escolha Criar um Registro de Contêiner do Azure.

  5. Preencha os valores desejados em Criar um novo Registro de Contêiner do Azure.

    Configuração Valor sugerido Descrição
    Prefixo DNS Nome globalmente exclusivo Nome que identifica exclusivamente o registro de contêiner.
    Assinatura Escolha sua assinatura A assinatura do Azure a utilizar.
    Grupo de Recursos myResourceGroup Nome do grupo de recursos no qual criar o registro de contêiner. Escolha Novo para criar um novo grupo de recursos.
    SKU Standard Camada de serviço do registro de contêiner
    Local do Registro Um local próximo Escolha um Local em uma região próxima a você ou perto de outros serviços que podem usar o registro de contêiner.

    Captura de tela da caixa de diálogo criar Registro de Contêiner do Azure do Visual Studio.

  6. Selecione Criar. A caixa de diálogo Publicar agora mostra o registro criado.

    Captura de tela da caixa de diálogo Publicar mostrando Registro de Contêiner do Azure criado.

  7. Escolha Concluir para concluir o processo de publicação da imagem de contêiner no registro recém-criado no Azure.

    Captura de tela mostrando a publicação bem-sucedida.

Próximas etapas

Agora, é possível extrair o contêiner do registro para qualquer host capaz de executar imagens do Docker, por exemplo Instâncias de Contêiner do Azure.

Recursos adicionais