Docker & Deployment
Containers, Dockerfile multi-stage, Docker Compose, Health Checks, CI/CD e estrategias de deploy para .NET
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.
| Aspecto | Container | VM |
|---|---|---|
| Isolamento | Processo (namespaces + cgroups) | Hardware virtualizado completo |
| Tamanho | MBs (imagem base ~100MB) | GBs (SO completo) |
| Startup | Segundos | Minutos |
| Kernel | Compartilhado com host | Proprio (guest OS) |
| Densidade | Centenas por host | Dezenas por host |
| Portabilidade | Qualquer host com Docker | Depende do hypervisor |
| Seguranca | Menor isolamento (kernel compartilhado) | Maior isolamento (kernel separado) |
Conceitos Docker
| Conceito | Descricao |
|---|---|
| Image | Template read-only com filesystem + metadados. Composta por layers. |
| Container | Instancia em execucao de uma imagem. Tem uma layer de escrita (copy-on-write). |
| Layer | Cada instrucao no Dockerfile cria uma layer. Layers sao cacheadas e reutilizadas. |
| Registry | Repositorio de imagens (Docker Hub, GitHub Container Registry, Azure ACR). |
| Dockerfile | Script que define como construir uma imagem passo a passo. |
| Volume | Armazenamento persistente fora do container. Sobrevive ao ciclo de vida do container. |
| Network | Rede virtual que permite comunicacao entre containers. |
.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/sdkeaspnetotimizadas - 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).