O famoso "na minha máquina funciona"
Imagine a cena: você terminou sua aplicação, testou tudo no seu computador, está perfeita. Manda para o colega... e quebra. Manda para produção... e quebra de novo. Por quê?
Porque a sua máquina tem:
- Uma versão específica do Node.js (ou Java, ou Python, ou Go)
- Bibliotecas instaladas há meses (algumas você nem lembra)
- Variáveis de ambiente configuradas
- Um sistema operacional com configurações próprias
A máquina do colega tem outra realidade. O servidor de produção tem uma terceira realidade. É uma bagunça.
Problemas que containers resolvem
Containers atacam vários problemas de uma vez só:
| Problema | Solução com containers |
|---|---|
| "Funciona na minha máquina" | A aplicação roda igual em qualquer lugar |
| Conflito de dependências | Cada aplicação tem seu próprio "ambiente" isolado |
| Deploy demorado | Sobe um container em segundos |
| Servidor inflado com mil coisas | Cada serviço fica em seu container |
| Difícil escalar | Sobe N cópias do mesmo container |
| Difícil padronizar ambientes | Dev, staging e prod usam a mesma imagem |
A analogia da marmita
Pensa numa marmita: ela tem o arroz, o feijão, a carne, tudo junto, fechado, pronto pra comer. Você pode levar pra qualquer lugar — escritório, parque, casa de amigo — e comer exatamente a mesma coisa.
Container é a marmita da sua aplicação. Dentro dele tem tudo o que ela precisa pra rodar: código, bibliotecas, runtime, configurações. Você empacota uma vez e roda em qualquer lugar que tenha um "micro-ondas" (Docker, Kubernetes, etc.).
Container vs Máquina Virtual
Uma dúvida clássica: "isso não é a mesma coisa que uma VM?"
Não. A diferença é importante:
MÁQUINA VIRTUAL CONTAINER
┌─────────────────┐ ┌─────────────────┐
│ App │ │ App │
├─────────────────┤ ├─────────────────┤
│ Bibliotecas │ │ Bibliotecas │
├─────────────────┤ ├─────────────────┤
│ SO Convidado │ ← pesado! │ (compartilha │
│ (Linux/Win) │ GBs │ o kernel do │
├─────────────────┤ │ host) │
│ Hypervisor │ ├─────────────────┤
├─────────────────┤ │ Docker Engine │
│ SO Hospedeiro │ ├─────────────────┤
├─────────────────┤ │ SO Hospedeiro │
│ Hardware │ ├─────────────────┤
└─────────────────┘ │ Hardware │
└─────────────────┘
- VM: Cada máquina virtual tem um sistema operacional inteiro dentro. Pesado, lento pra subir (minutos), gasta muita RAM e disco.
- Container: Compartilha o kernel do sistema hospedeiro. Leve, sobe em segundos, gasta MB ao invés de GB.