Docker e C#: conteinerização de aplicações do A ao Z

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#: guia completo para conteinerização de aplicações .NET



A conteinerização tornou-se o padrão de facto para a implantação de aplicações modernas. Se você desenvolve em C# (.NET), o Docker permite empacotar sua aplicação junto com todas as suas dependências em um contêiner leve e isolado. Neste artigo, percorreremos o caminho desde a criação de um Dockerfile simples até a publicação e execução de uma imagem pronta. Você aprenderá como conteinerizar uma aplicação em C#, otimizar o tamanho da imagem e usar as melhores práticas.



1. Fundamentos do Docker para o desenvolvedor .NET



Docker é uma plataforma para desenvolvimento, entrega e execução de aplicações em contêineres. Um contêiner é uma unidade padronizada de software que inclui o código e todas as suas dependências. Ao contrário das máquinas virtuais, os contêineres compartilham o kernel do sistema operacional, tornando-os mais rápidos e leves.



Para C# (.NET), o Docker é especialmente útil, pois resolve o problema "funciona na minha máquina" — você garante que a aplicação se comportará da mesma forma na máquina do desenvolvedor, no servidor de teste e em produção. Os principais componentes são:



  • Docker Engine — ambiente de execução de contêineres
  • Dockerfile — arquivo de texto com instruções para construir a imagem
  • Imagem (Image) — modelo imutável para criar contêineres
  • Contêiner (Container) — instância em execução de uma imagem


Instale o Docker Desktop para Windows/Mac ou o Docker Engine para Linux. Após a instalação, verifique o funcionamento com o comando:



docker --version


2. Criando um Dockerfile para aplicação C# (.NET)



Vamos começar com uma aplicação simples ASP.NET Core Web API. Crie um novo projeto:



dotnet new webapi -n MyDockerAppcd MyDockerApp


Agora, crie um arquivo Dockerfile (sem extensão) na raiz do projeto. Aqui está uma versão básica com construção em múltiplos estágios (multi-stage build):



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

# Copiamos o csproj e restauramos as dependênciasCOPY ["MyDockerApp.csproj", "."]RUN dotnet restore

# Copiamos o restante do código e compilamos o projetoCOPY . .RUN dotnet publish -c Release -o /app/publish

# Estágio 2: criação de uma imagem mínima para execuçãoFROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtimeWORKDIR /appEXPOSE 80EXPOSE 443

# Copiamos a aplicação compilada do primeiro estágioCOPY --from=build /app/publish .

# Ponto de entradaENTRYPOINT ["dotnet", "MyDockerApp.dll"]


Explicação das instruções principais:

  • FROM — define a imagem base (SDK para construção, ASP.NET para execução)
  • WORKDIR — define o diretório de trabalho
  • COPY — copia arquivos do contexto de construção para a imagem
  • RUN dotnet restore — restaura os pacotes NuGet
  • RUN dotnet publish — compila e publica a aplicação
  • EXPOSE — indica as portas que o contêiner irá escutar
  • ENTRYPOINT — comando executado ao iniciar o contêiner


A construção em múltiplos estágios é criticamente importante para C#: a imagem final contém apenas o runtime e sua aplicação, sem o SDK e os fontes. Isso reduz o tamanho da imagem de ~1,5 GB para ~200 MB.



3. Construção e execução do contêiner



Construa a imagem Docker:



docker build -t my-dotnet-app:latest .


A flag -t define a tag (nome:versão). O ponto no final indica o diretório atual como contexto de construção.



Execute o contêiner:



docker run -d -p 8080:80 --name my-app my-dotnet-app:latest


Parâmetros:

  • -d — execução em segundo plano (detached)
  • -p 8080:80 — redirecionamento de porta: porta do host 8080

Blogs

Book Recommendations