1. O Que E o Docker
Docker e uma plataforma open-source de conteinerizacao que permite empacotar aplicacoes e suas dependencias em unidades isoladas chamadas containers. Lancado em 2013 pela Docker Inc., tornou-se o padrao de fato para desenvolvimento, teste e implantacao de aplicacoes modernas.
A ideia central e resolver o problema do "funciona na minha maquina": ao empacotar tudo que uma aplicacao precisa — runtime, bibliotecas, configuracoes — em um container, voce garante que ela se comportara identicamente em qualquer ambiente, do laptop do desenvolvedor ao servidor de producao.
2. Containers vs VMs
Containers e maquinas virtuais (VMs) sao tecnologias de isolamento, mas com abordagens bem diferentes:
- VMs virtualizam o hardware completo e rodam um sistema operacional inteiro. Sao pesadas (GBs), demoram minutos para iniciar e consomem recursos significativos.
- Containers compartilham o kernel do sistema operacional host e isolam apenas processos e sistemas de arquivos. Sao leves (MBs), iniciam em segundos e sao muito mais eficientes em recursos.
Na pratica, containers sao ideais para microservicos, CI/CD e deploys rapidos. VMs ainda fazem sentido para isolamento de seguranca maxima ou quando voce precisa rodar sistemas operacionais diferentes.
3. Docker Compose na Pratica
O Docker Compose permite definir e gerenciar aplicacoes multi-container em um arquivo YAML (docker-compose.yml). Com um unico comando (docker compose up), voce sobe toda a stack: API, banco de dados, cache, workers e mais.
"Docker Compose e a ferramenta que transforma uma infraestrutura complexa em um arquivo de texto versionado no Git. E a forma mais pratica de documentar e reproduzir ambientes de desenvolvimento."
Use docker compose up -d --build para subir tudo em background e docker compose logs -f servico para acompanhar os logs em tempo real.
4. Volumes e Persistencia de Dados
Por padrao, dados escritos dentro de um container sao efemeros — ao remover o container, os dados sao perdidos. Para persistencia, o Docker oferece tres opcoes:
- Volumes nomeados (
-v nome:/caminho): gerenciados pelo Docker, ideais para bancos de dados em producao. - Bind mounts (
-v /host:/container): montam um diretorio do host, ideais para desenvolvimento com hot reload. - tmpfs mounts: armazenamento em memoria RAM, para dados temporarios sensíveis.
Para ambientes de producao, sempre use volumes nomeados com backups regulares. Para desenvolvimento, bind mounts sao mais convenientes pois permitem editar o codigo no host e ver as mudancas no container instantaneamente.
5. Boas Praticas de Producao
Para usar Docker em producao com seguranca e eficiencia:
- Use imagens oficiais e alpine quando possivel para reduzir superficie de ataque e tamanho.
- Nunca rode containers como root — use a diretiva
USERno Dockerfile. - Defina politicas de restart (
--restart unless-stopped) para tolerancia a falhas. - Limite recursos com
--memorye--cpuspara evitar que um container consuma todo o host. - Use
docker system pruneregularmente para liberar espaco em disco. - Nao guarde segredos em variaveis de ambiente; use Docker Secrets ou um cofre de segredos.
6. Perguntas Frequentes
Qual a diferenca entre docker stop e docker kill?
docker stop envia SIGTERM e aguarda graceful shutdown (padrao 10s), depois envia SIGKILL. docker kill envia SIGKILL imediatamente. Para aplicacoes que precisam finalizar transacoes, prefira sempre docker stop.
Como limpar espaco em disco do Docker?
Use docker system prune -a --volumes para remover tudo que nao esta em uso: containers parados, imagens sem tag, networks nao usadas e volumes orfaos. Cuidado: o flag --volumes remove volumes nao associados a containers ativos.
Quando usar Docker Compose vs Kubernetes?
Docker Compose e ideal para desenvolvimento local e deployments simples em um unico servidor. Kubernetes e adequado para producao em escala com alta disponibilidade, autoscaling, rolling deployments e gerenciamento de cluster. Para a maioria dos projetos iniciando, Compose + um bom servidor e suficiente.