Networking em Docker pode parecer mágica. Entenda como containers se comunicam, isolamento de redes e configurações avançadas.
Conceitos Principais
Bridge Network
Default para containers. Network privada no host. Containers se comunicam por IP ou nome (com --link). Isolado de outras networks.
Host Network
Container usa network stack do host diretamente. Sem isolamento. Performance máxima. Útil para apps que precisam de todas as portas.
DNS Interno
Docker resolve nomes de containers para IPs. Em user-defined networks, usa container name. Em default bridge, precisa --link.
Port Mapping
-p host:container expõe porta. Docker faz NAT. Múltiplos containers podem usar mesma porta interna (3000), diferentes portas externas.
Passo a Passo
- Crie Custom Network:
docker network create minha-app-net. Liste:docker network ls. Inspecione:docker network inspect minha-app-net. User-defined > default bridge. - Conecte Containers:
docker run --network minha-app-net --name api app-image.docker run --network minha-app-net --name db postgres. API acessa db via hostname "db". - Teste DNS: Entre no container:
docker exec -it api sh. Ping outro container:ping db. Resolve automaticamente. DNS só funciona em user-defined networks. - Port Mapping:
docker run -p 8080:3000 --network minha-app-net api. Acesso externo: localhost:8080. Interno entre containers: api:3000. - Network Isolation: Crie networks separadas para frontend/backend. Frontend network: web, api. Backend network: api, db. API em ambas, db isolada do web.
Boas Praticas
Recomendacoes
• Sempre use user-defined networks (não default bridge)
• Nomeie containers para DNS funcionar
• Use network aliases para load balancing
• Isole databases em networks privadas
Erros Comuns
Evite estes erros
• Usar default bridge e --link (deprecated)
• Expor todas as portas desnecessariamente
• Não isolar serviços sensíveis
Checklist
- User-defined network criada
- Containers nomeados corretamente
- DNS interno testado
- Portas mapeadas apenas necessárias
- Isolamento de segurança configurado