DEV Community

Cover image for Docker Network: O Guia Definitivo para Conectar Seus Containers
Rafael Pazini
Rafael Pazini

Posted on

Docker Network: O Guia Definitivo para Conectar Seus Containers

Se você já tentou rodar múltiplos containers e percebeu que um não consegue falar com o outro, bem-vindo ao mundo do Docker Networking. Sem uma rede bem configurada, seu banco de dados não conseguirá conversar com a API, seu frontend não encontrará o backend, e seu sistema simplesmente não vai funcionar.

O que é Docker Network e para que ela serve?

Docker Network é o mecanismo que permite que containers se comuniquem entre si, com o host ou até com redes externas. Quando você roda uma aplicação containerizada com vários serviços (como um frontend, um backend e um banco de dados), você precisa de uma forma eficiente e segura para que esses serviços troquem informações.

Com Docker Networking, você pode:

  • Criar redes isoladas para diferentes aplicações. Permitir que containers se comuniquem por nome (em vez de IPs dinâmicos).
  • Configurar diferentes tipos de conectividade, como comunicação entre hosts.
  • Definir regras de segurança para proteger seus serviços. Agora que você entendeu o propósito do Docker Networking, vamos ver os tipos de redes disponíveis e como usá-los!

Os Tipos de Rede no Docker

O Docker já vem com alguns tipos de redes por padrão, e você pode listar elas com o comando:

docker network ls
Enter fullscreen mode Exit fullscreen mode

Isso retorna algo assim:

NETWORK ID     NAME      DRIVER    SCOPE
abc123def456   bridge    bridge    local
def456ghi789   host      host      local
jkl012mno345   none      null      local
Enter fullscreen mode Exit fullscreen mode

Agora vamos entender como cada uma funciona na prática.


1. Bridge Network: A Rede Padrão do Docker

A bridge network funciona como um switch virtual, permitindo que containers dentro da mesma rede se comuniquem sem precisar de configurações complexas.

Exemplo prático: conectando um backend a um banco de dados

Se você rodar containers sem especificar uma rede, eles entram automaticamente na rede bridge padrão. Mas para facilitar a comunicação por nomes, o ideal é criar uma rede customizada:

docker network create minha-rede
Enter fullscreen mode Exit fullscreen mode

Agora, ao criar os containers, conectamos eles à mesma rede:

docker run -d --name database --network minha-rede postgres
docker run -d --name backend --network minha-rede golang:1.22
Enter fullscreen mode Exit fullscreen mode

Dessa forma, dentro do container backend, podemos acessar o banco de dados pelo nome database, em vez de precisar descobrir seu IP dinâmico.


2. Host Network: Acesso Direto à Rede do Host

A rede host remove o isolamento da rede Docker e permite que o container use diretamente a rede do host. Isso significa que ele pode acessar qualquer porta do sistema operacional como se estivesse rodando nativamente.

Quando usar?

  • Para ferramentas de monitoramento (como Prometheus e Grafana).
  • Para containers que precisam acessar diretamente interfaces de rede do host.
  • Para eliminar a sobrecarga de NAT e obter maior performance.

Exemplo prático: rodando Prometheus na rede host

docker run -d --network host --name prometheus prom/prometheus
Enter fullscreen mode Exit fullscreen mode

Agora, o Prometheus pode acessar qualquer porta do host diretamente, sem precisar de configurações extras.

Atenção: O uso da rede host pode ser um risco de segurança, pois remove o isolamento dos containers.


3. None Network: Isolamento Total

A rede none é usada quando queremos que um container não tenha acesso à rede alguma. Isso é útil para tarefas que não exigem conexão com outros serviços.

Exemplo prático: rodando um container isolado

docker run -d --network none --name isolated alpine sleep infinity
Enter fullscreen mode Exit fullscreen mode

Esse container estará completamente isolado e não conseguirá se comunicar com nenhum outro serviço.


4. Overlay Network: Comunicação Entre Vários Hosts

A overlay network permite que containers rodando em hosts diferentes dentro de um cluster Docker Swarm se comuniquem como se estivessem na mesma máquina.

Exemplo prático: Criando uma rede Overlay no Swarm

docker network create   --driver overlay   --attachable   --opt encrypted   microservices-net
Enter fullscreen mode Exit fullscreen mode

Agora podemos criar serviços distribuídos que se comunicam entre si:

docker service create   --name api   --network microservices-net   --replicas 3   minhaapi:latest
Enter fullscreen mode Exit fullscreen mode

Uso real: Empresas que rodam sistemas distribuídos usam overlay para escalar seus serviços em múltiplos servidores.


5. Macvlan: Dando IPs Reais aos Containers

A rede macvlan permite que cada container tenha um IP próprio na rede local, como se fosse um dispositivo físico.

Quando usar?

  • Para integrar containers em redes físicas tradicionais.
  • Quando um container precisa ser tratado como um dispositivo de rede separado.
  • Para migrar aplicações legadas que exigem IPs estáticos.

Exemplo prático: Criando uma rede Macvlan

docker network create -d macvlan   --subnet=192.168.1.0/24   --gateway=192.168.1.1   -o parent=eth0   rede-fisica
Enter fullscreen mode Exit fullscreen mode

Agora, criamos um container que recebe um IP real da rede:

docker run --network rede-fisica --ip=192.168.1.10 nginx
Enter fullscreen mode Exit fullscreen mode

Isso é útil para integrar containers a sistemas de monitoramento e segurança que precisam de IPs fixos.


Dicas Práticas para Configurar Networking no Docker

  • Use Redes Customizadas: Evite a bridge padrão e crie redes nomeadas para organizar melhor seus serviços.
  • Separe Serviços por Função: Use redes diferentes para frontend, backend e banco de dados.
  • Monitore as Conexões: Use docker network inspect e ferramentas como Wireshark para verificar problemas de rede.
  • Teste Sempre: Para verificar se containers conseguem se comunicar, use ping ou curl dentro dos containers:
docker exec backend ping database
Enter fullscreen mode Exit fullscreen mode

Conclusão

Entender como funcionam as redes do Docker é essencial para criar aplicações containerizadas escaláveis e seguras. Cada tipo de rede tem sua função específica:

  • Bridge: Para comunicação local entre containers no mesmo host.
  • Host: Para containers que precisam acessar a rede diretamente.
  • None: Para isolar completamente um container.
  • Overlay: Para conectar containers em hosts diferentes.
  • Macvlan: Para containers que precisam de IPs reais na rede.

Agora que você conhece cada tipo, está pronto para construir redes eficientes para seus containers! 🚀

Se tiver dúvidas ou quiser compartilhar sua experiência, me encontre no LinkedIn ou GitHub. Vamos continuar aprendendo juntos!

Top comments (1)

Collapse
 
fernandosvrosa profile image
Fernando da Silva Rosa

It’s a very nice post Rafa, introduce the best practices for work containers network