O Docker conecta aplicações isolando-as através de recursos do kernel Linux chamados 'Network Namespaces' e roteando o tráfego usando drivers de rede virtuais. Por padrão, ao iniciar um container, o Docker cria uma rede do tipo 'bridge', onde cada container recebe um endereço IP interno privado para se comunicar com outros containers na mesma máquina. Para que essa aplicação seja acessível pelo mundo externo, o Docker utiliza regras de NAT (Network Address Translation) no firewall do servidor para mapear as portas do container para as portas do hospedeiro físico.
Principais Aprendizados
- O isolamento de rede no Docker não é mágica, é baseado em Network Namespaces do Linux.
- Existem diferentes drivers de rede (Bridge, Host, Overlay) para diferentes necessidades de arquitetura.
- A comunicação externa depende do mapeamento correto de portas entre o container e o servidor host.
A Magia por Trás dos Panos: Network Namespaces
Antes de entender os comandos do Docker, é vital compreender a ciência por trás dele. O Docker não cria máquinas virtuais completas; ele compartilha o kernel do sistema operacional host. Para garantir que um container não interfira na rede do outro, ele utiliza Network Namespaces do Linux.
Um namespace de rede cria uma cópia isolada da pilha de rede (interfaces, tabelas de roteamento, regras de firewall). Quando o Docker inicia um container, ele cria um novo namespace de rede para ele e usa interfaces virtuais (veth pairs) para conectar esse namespace isolado à rede principal do servidor. É como se cada container morasse em um apartamento com sua própria fiação, mas todos estivessem ligados ao quadro de energia principal do prédio.

Os 4 Principais Drivers de Rede do Docker
O Docker oferece diferentes abordagens para conectar suas aplicações, conhecidas como drivers de rede. A escolha do driver correto dita como o tráfego fluirá.
1. Bridge (A Ponte Padrão)
Este é o driver padrão. A rede bridge cria uma ponte de software no host. Containers conectados a essa mesma ponte podem se comunicar usando seus IPs internos. No entanto, eles estão isolados de containers em outras pontes. Para que o mundo externo acesse a aplicação web rodando no container, é necessário fazer o mapeamento de portas (publish ports), um processo tecnicamente idêntico a liberar portas no seu roteador doméstico para permitir conexões entrantes.
2. Host (Sem Isolamento)
Se você usar o driver 'host', o container não receberá um IP próprio nem um namespace isolado. Ele compartilhará a pilha de rede do servidor físico. Se o seu container roda um servidor web na porta 80, ele ocupará a porta 80 do próprio servidor host. Isso oferece máxima performance por remover a camada de virtualização (NAT), mas reduz a segurança e impede de rodar dois containers na mesma porta.
3. Overlay (Para Clusters)
Quando sua infraestrutura cresce e você passa a usar orquestradores como o Docker Swarm, os containers estarão espalhados por vários servidores físicos. O driver Overlay resolve isso. Esse driver funciona na prática como uma rede definida por software, criando um túnel criptografado e distribuído entre diferentes máquinas físicas, permitindo que um container no Servidor A converse com um no Servidor B como se estivessem lado a lado.
4. Macvlan (Conexão Direta)
O driver Macvlan permite atribuir um endereço MAC real a um container, fazendo com que ele apareça como um dispositivo físico independente na sua rede local. É muito utilizado em migrações de sistemas legados que exigem conexão direta com a rede física da empresa sem passar por roteamentos complexos.

Como Containers se Comunicam no Docker Compose
Uma das maiores facilidades do Docker é a resolução de nomes (DNS) interna. Quando você sobe uma aplicação usando o Docker Compose (por exemplo, um servidor Node.js e um banco de dados PostgreSQL), o Compose cria automaticamente uma rede bridge dedicada para esse projeto.
A mágica aqui é que você não precisa saber o endereço IP do banco de dados. O Docker embute um servidor DNS interno que mapeia o nome do serviço (ex: 'db') para o IP dinâmico do container. Assim, seu código Node.js só precisa tentar conectar em 'postgres://usuario:senha@db:5432', e o Docker se encarrega de rotear os pacotes corretamente, independentemente de qual IP o container recebeu ao iniciar.
Segurança e Isolamento de Rede em Containers
A segurança de rede em ambientes conteinerizados é crítica. Por padrão, o Docker manipula ativamente as regras do iptables do Linux para prover isolamento. Criar redes bridge separadas para diferentes projetos é uma excelente forma de segmentação de rede, garantindo que um container comprometido em uma aplicação não consiga escanear ou atacar o banco de dados de outra aplicação rodando no mesmo servidor.
Segundo o guia de segurança de containers SP 800-190 publicado pelo NIST (Instituto Nacional de Padrões e Tecnologia dos EUA), o tráfego de rede entre containers deve ser rigorosamente monitorado e as portas expostas ao host devem ser limitadas estritamente ao necessário para reduzir a superfície de ataque.

Perguntas Frequentes
Containers na mesma máquina sempre podem se comunicar?
Não. Por padrão, containers só podem se comunicar livremente se estiverem conectados à mesma rede virtual (bridge) dentro do Docker. Se estiverem em redes distintas, o Docker bloqueia o tráfego entre eles via regras de firewall (iptables).
Como exponho meu container para a internet?
Para tornar um container acessível externamente, você deve usar a flag '-p' (publish) ao iniciá-lo. Por exemplo, '-p 8080:80' mapeia a porta 8080 do servidor físico para a porta 80 do container. O tráfego que chega na porta 8080 do servidor será redirecionado para a aplicação no container.
Qual a diferença entre rede bridge e host no Docker?
A rede 'bridge' cria um ambiente isolado com IPs internos, exigindo mapeamento de portas para acesso externo. Já a rede 'host' remove esse isolamento; o container usa diretamente o IP e as portas da máquina física onde está rodando, oferecendo menos overhead de rede, mas menor segurança e flexibilidade.
0 Comentários