Dominando Redes no Docker: Do Conceito à Implementação Prática

No ecossistema de containers, a rede é o componente que permite a comunicação entre serviços, o acesso à internet e a exposição de aplicações para o mundo externo. Entender como o Docker gerencia o tráfego de dados é fundamental para arquitetar sistemas distribuídos resilientes e seguros.

Fundamentos de Rede no Docker

Ao instalar o Docker, o engine configura automaticamente três interfaces de rede inicciais. Você pode listá-las com o seguinte comando:

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
e3f4g5h6i7j8   bridge    bridge    local
k9l0m1n2o3p4   host      host      local
q5r6s7t8u9v0   none      null      local

Análise dos Drivers de Rede Principais

1. Modo Bridge (Padrão)

Este é o driver padrão utilizado quando nenhum modo é especificado. Ele cria uma ponte virtual (geralmente chamada de docker0) no host. Cada container recebe um endereço IP privado dentro da faixa dessa sub-rede.

Exemplo: Implantando um servidor Apache com mapeamento de porta

# Executa o container mapeando a porta 80 do container para a 9090 do host
docker run -d --name servidor-apache -p 9090:80 httpd:alpine

# Verifica as portas ativas
docker port servidor-apache

# Teste de conectividade local
curl http://localhost:9090

2. Modo Host

Neste modo, o container compartilha diretamente o stack de rede do host, removendo o isolamento entre o sistema hospedeiro e o container. Não há necessidade de mapeamento de portas (port forwarding), o que resulta em performance máxima de I/O.

# Executa um utilitário de rede para listar portas do host através do container
docker run --rm --net=host alpine netstat -tulpn

3. Modo None

Desativa completamente a interface de rede externa do container. Útil para tarefas de processamento em lote que exigem alto isolamento ou para montagem manual de configurações de rede personalizadas.

docker run -it --net=none alpine ip addr

Redes Customizadas (User-Defined Bridge)

Em ambientes de produção, redes bridge personalizadas são preferíveis em relação à rede bridge padrão. Elas oferecem resolução automática de DNS entre containers (permitindo o uso do nome do container como hostname) e melhor isolamento.

Prática: Comunicação entre Microserviços

# 1. Criar uma rede isolada para a aplicação
docker network create --driver bridge rede-producao

# 2. Subir uma instância de banco de dados MongoDB na rede
docker run -d --name banco-dados --net rede-producao mongo:latest

# 3. Executar um container de aplicação para testar a resolução de nome
docker run -it --rm --net rede-producao alpine ping -c 3 banco-dados

Interconectando Redes Distintas

Um container pode estar conectado a múltiplas redes simultaneamente. Isso permite criar "pontes" entre diferentes camadas da aplicação.

# Conectar um container existente a uma nova rede
docker network connect rede-producao container-legado

# Validar a conexão
docker inspect container-legado --format='{{json .NetworkSettings.Networks}}'

Cenário Real: Setup de Aplicação Web e Banco de Dados

Abaixo, um exemplo de como estruturar uma stack simples garantindo que os serviços se comuniquem de forma isolada.

# Criação da rede de backend
docker network create backend-net

# Inicialização do MariaDB
docker run -d --name db-servidor \
  --net backend-net \
  -e MARIADB_ROOT_PASSWORD=admin_pass \
  mariadb:latest

# Inicialização do Adminer (Interface Web) para gerenciar o DB
docker run -d --name gerenc-db \
  --net backend-net \
  -p 8081:8080 \
  adminer

Diagnóstico e Solução de Problemas

Para depurar problemas de conectividade, as seguintes ferramentas são essenciais:

  • Inspecionar detalhes da rede: docker network inspect [NOME_DA_REDE]
  • Capturar tráfego: Utilizar um container com tcpdump compartilhado no namespace do container alvo: ``` docker run --rm --net=container:[NOME_CONTAINER] nicolaka/netshoot tcpdump -i eth0
  • Verificar IP de um container específico: ``` docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [ID_CONTAINER]
    
    

Resumo de Escolha de Driver

Caso de Uso Driver Recomendado Principal Vantagem
Aplicações multicontainer locais Custom Bridge DNS nativo e isolamento.
Serviços de alta performance Host Latência de rede mínima.
Segurança máxima/Processamento local None Isolamento total de stack.
Clusters multi-host Overlay Comunicação entre diferentes nós.

Tags: Docker devops containers Networking Infrastructure

Publicado em 7-9 17:10