Docker e a ferramenta padrao para empacotar e distribuir aplicacoes .NET. Com multi-stage builds, voce cria imagens leves e seguras prontas para producao.

Containers vs Maquinas Virtuais

Containers compartilham o kernel do host e isolam apenas o user space. VMs virtualizam o hardware completo, incluindo kernel proprio. Isso torna containers muito mais leves β€” iniciam em segundos e consomem menos recursos.

AspectoContainerVM
IsolamentoProcesso (namespaces + cgroups)Hardware virtualizado completo
TamanhoMBs (imagem base ~100MB)GBs (SO completo)
StartupSegundosMinutos
KernelCompartilhado com hostProprio (guest OS)
DensidadeCentenas por hostDezenas por host
PortabilidadeQualquer host com DockerDepende do hypervisor
SegurancaMenor isolamento (kernel compartilhado)Maior isolamento (kernel separado)

Conceitos Docker

ConceitoDescricao
ImageTemplate read-only com filesystem + metadados. Composta por layers.
ContainerInstancia em execucao de uma imagem. Tem uma layer de escrita (copy-on-write).
LayerCada instrucao no Dockerfile cria uma layer. Layers sao cacheadas e reutilizadas.
RegistryRepositorio de imagens (Docker Hub, GitHub Container Registry, Azure ACR).
DockerfileScript que define como construir uma imagem passo a passo.
VolumeArmazenamento persistente fora do container. Sobrevive ao ciclo de vida do container.
NetworkRede virtual que permite comunicacao entre containers.
pushrunDockerfiledocker buildImageRegistrydocker pullContainer

.NET e Docker: Por que funciona bem

O .NET foi projetado para rodar em containers. O runtime e cross-platform, suporta builds self-contained, e a Microsoft publica imagens oficiais otimizadas. O ASP.NET Core roda nativamente em Linux sem dependencias externas.

  • Cross-platform: Mesma app roda em Windows e Linux containers
  • Self-contained: Pode incluir o runtime na imagem (sem depender do host)
  • Imagens oficiais:mcr.microsoft.com/dotnet/sdk e aspnet otimizadas
  • Kestrel: Servidor web integrado, ideal para containers (sem IIS)
  • Health checks: Suporte nativo para probes do Kubernetes
  • Configuration: Environment variables funcionam perfeitamente com containers
Atencao: Containers sao efemeros. Nao guarde estado no container β€” use volumes ou servicos externos (bancos de dados, blob storage, etc).
Qual a diferenca entre container e VM?
Um container compartilha o kernel do host e isola apenas o processo via namespaces e cgroups. Uma VM virtualiza o hardware completo com um kernel proprio (guest OS). Containers sao mais leves (MBs vs GBs), iniciam em segundos, e permitem maior densidade. VMs oferecem isolamento mais forte pois tem kernel separado. Para microservicos .NET, containers sao a escolha padrao. VMs sao preferidas quando se precisa de isolamento total (multi-tenancy, compliance).