Docker e C#: conteinerização de aplicações .NET do zero

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Docker e C#: conteinerização de aplicações .NET



No desenvolvimento moderno de software, a conteinerização tornou-se o padrão de facto para criar, testar e implantar aplicações. O Docker permite empacotar sua aplicação C# juntamente com todas as suas dependências em um ambiente isolado — um contêiner. Isso garante que a aplicação funcione da mesma forma em qualquer máquina: do laptop do desenvolvedor ao servidor de produção na nuvem.



Neste artigo, vamos detalhar como conteinerizar aplicações .NET usando Docker. Você aprenderá como criar Dockerfiles eficientes, usar compilação em múltiplos estágios, trabalhar com docker-compose para aplicações com vários contêineres e seguir as melhores práticas.



O que é Docker e por que um desenvolvedor C# precisa dele?



Docker é uma plataforma para desenvolvimento, entrega e execução de aplicações em contêineres. Um contêiner é um pacote leve, autônomo e executável que contém tudo o que é necessário para a aplicação funcionar: código, ambiente de execução (runtime), ferramentas do sistema, bibliotecas e configurações.



Para um desenvolvedor C#, o Docker oferece as seguintes vantagens:

  • Isolamento de ambiente — não é mais necessário configurar o ambiente em cada máquina. Todas as dependências são fixadas na imagem.
  • Uniformização — a aplicação funciona da mesma forma no Windows, Linux e macOS.
  • Escalabilidade — é fácil executar várias instâncias da aplicação para lidar com a carga.
  • Integração CI/CD — contêineres são ideais para pipelines automáticos de compilação e implantação.
  • Arquitetura de microsserviços — cada serviço pode ser empacotado em um contêiner separado.


É importante notar que o .NET Core (e os mais recentes .NET 5/6/7/8) são multiplataforma e funcionam perfeitamente em contêineres Linux, que são o padrão para Docker. Aplicações .NET Framework exigem contêineres Windows, o que impõe certas limitações.



Criando um Dockerfile para aplicação .NET



O principal artefato para conteinerização é o arquivo Dockerfile. Ele contém instruções para compilar a imagem da sua aplicação. Vamos considerar um exemplo para uma Web API ASP.NET Core típica.



Crie um arquivo Dockerfile na raiz do seu projeto:



# Estágio 1: Compilação da aplicaçãoFROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildWORKDIR /src

# Copiamos o arquivo do projeto e restauramos as dependênciasCOPY ["MyApp/MyApp.csproj", "MyApp/"]RUN dotnet restore "MyApp/MyApp.csproj"

# Copiamos todo o código fonte e compilamos a aplicaçãoCOPY . .WORKDIR "/src/MyApp"RUN dotnet build "MyApp.csproj" -c Release -o /app/build

# Estágio 2: Publicação da aplicaçãoFROM build AS publishRUN dotnet publish "MyApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

# Estágio 3: Imagem final para execuçãoFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS finalWORKDIR /appEXPOSE 80EXPOSE 443

# Copiamos os arquivos publicados do estágio publishCOPY --from=publish /app/publish .

# Definimos um usuário sem privilégios root para segurançaUSER app

ENTRYPOINT ["dotnet", "MyApp.dll"]


Análise das instruções:

  • FROM ... AS build — usamos a imagem SDK para compilação. Esta é a etapa de "construção".
  • WORKDIR — define o diretório de trabalho.
  • COPY — copia arquivos do sistema host para a imagem.
  • RUN dotnet restore — restaura os pacotes NuGet.
  • RUN dotnet build — compila o projeto.
  • FROM ... AS publish — segundo estágio para publicação (frequentemente combinado com build).
  • FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final — imagem final contendo apenas o runtime ASP.NET Core. É muito mais leve que a imagem SDK.
  • COPY --from= — copia os artefatos do estágio de publicação para a imagem final.

Blogs

Book Recommendations