Programa
O networking é um conceito central das aplicações em contêineres. Ele permite uma comunicação perfeita entre todos os contêineres, sistemas host e serviços externos. Os recursos de rede integrados do Docker são essenciais para isolar serviços de forma eficaz, proteger o fluxo de dados e orquestrar arquiteturas de microsserviços escaláveis.
Uma das ferramentas mais poderosas nesse contexto é o comando Docker network create, que permite que os engenheiros e desenvolvedores de DevOps definam redes personalizadas de acordo com as necessidades de suas aplicações.
É por isso que hoje vou te mostrar passo a passo como criar e gerenciar essas redes Docker de forma eficaz.
Se você é novo no Docker, não deixe de conferir nosso programa de habilidades em Containerização e virtualização com Docker e Kubernetes para ganhar um pouco de experiência prática.
O que é a rede Docker?
Criar aplicativos modernos geralmente envolve usar vários serviços em contêineres individuais e isolados. A rede do Docker oferece uma maneira flexível e poderosa de conectar esses contêineres entre si e com sistemas externos, usando qualquer modelo de rede que você escolher, independentemente da infraestrutura subjacente.
Esta seção fornecerá conhecimentos básicos sobre redes Docker, que são um componente essencial do Docker, e como avaliar qual configuração de rede funcionará melhor para as necessidades da sua aplicação. Mas antes de começar, se você é totalmente novo no Docker, recomendo fortemente que dê uma olhada em Introdução ao Docker para construir uma base sólida antes de mergulhar mais fundo na rede do Docker.
Drivers de rede: a base da rede do Docker
O Docker usa drivers de rede pra definir como os contêineres se conectam e se comunicam. Cada driver define como vai lidar com a rede do contêiner. Por isso, tem vários níveis de desempenho, isolamento e complexidade para cada um dos principais drivers de rede do Docker.
Visão geral dos principais drivers de rede do Docker
Aqui estão os principais drivers integrados que o Docker suporta:
- : O driver padrão para contêineres autônomos. Cria uma rede interna isolada no host, permitindo que os contêineres se comuniquem entre si usando IPs ou nomes de contêineres. Ótimo pra desenvolvimento e testes em um único host.
- Apresentador: Tira o isolamento compartilhando a pilha de rede do host. O contêiner usa o IP e as portas do host direto. Ótimo pra aplicações que precisam de um desempenho alto ou pra se conectar com serviços no host.
- Nenhuma: Desativa toda a rede do contêiner. Só tem uma interface de loopback disponível. Ideal para contêineres que não precisam de conectividade externa ou exigem isolamento de segurança rigoroso.
- Sobreposição: Permite a comunicação entre contêineres em diferentes hosts Docker. Usado normalmente no Docker Swarm e em implantações com vários hosts. Cria uma rede distribuída que abstrai a infraestrutura física subjacente.
- Macvlan: Dá um endereço MAC único para cada contêiner, fazendo com que ele apareça como um dispositivo físico na rede. Ótimo pra aplicativos antigos que precisam acessar diretamente a rede física.
- IPvlan: Parecido com o macvlan, mas encaminha o tráfego na camada IP em vez de usar endereços MAC. Dá um desempenho e controle melhores em ambientes com muita coisa.
Cada driver afeta como os contêineres interagem entre si, com o host e com redes externas.
Quer saber como esses tipos de rede funcionam juntos? Nosso curso intermediário sobre Docker cobre redes, volumes e Compose do Docker com detalhes práticos. Entender essas diferenças é essencial pra criar arquiteturas seguras e com bom desempenho.
Que tipo de rede devo usar?
Escolher o driver de rede certo depende da arquitetura do seu aplicativo e dos objetivos operacionais:
- : Recomendado para a maioria dos cenários de desenvolvimento local e aplicações simples com vários contêineres em um único host. Tem um equilíbrio entre isolamento e facilidade de uso.
- Apresentador: Ideal quando os contêineres precisam se conectar direto à rede do host, tipo quando você está expondo serviços em portas padrão (por exemplo, porta 80 ou 443). Fica atento à segurança e aos conflitos de portas.
- Nenhuma: Ideal para cargas de trabalho em sandbox ou tarefas críticas para a segurança que não devem ter acesso à rede. É comum em fluxos de trabalho automatizados ou testes.
- Sobreposição: É essencial em ambientes agrupados, como Docker Swarm ou Kubernetes, onde os contêineres estão espalhados por vários hosts. Permite escalonamento horizontal e descoberta de serviços.
- Macvlan: É melhor usar isso quando os contêineres precisam funcionar como dispositivos físicos na LAN. Usado em casos como sniffing de rede, integração de sistemas antigos ou quando se quer passar pela pilha de rede do Docker.
- IPvlan: Oferece controle detalhado e melhor desempenho do que o macvlan para ambientes com requisitos de rede rigorosos, como sistemas financeiros ou de telecomunicações.
Pense em coisas como a topologia do host, as necessidades de segurança e a estratégia de escalabilidade ao escolher um driver de rede.
Ainda tá decidindo qual rede é a melhor pra sua carga de trabalho? Veja como o Docker se compara ao Kubernetes em implementações reais com este guia Kubernetes vs Docker.
Criando redes Docker personalizadas
As redes personalizadas do Docker permitem controlar como os contêineres se comunicam internamente entre si, bem como com sistemas externos, o que pode ajudar a isolar melhor os serviços, atribuir IPs previsíveis ou projetar sua arquitetura para obter desempenho ou segurança.
Esta seção vai te mostrar o básico e as funcionalidades mais avançadas na hora de criar redes Docker personalizadas, incluindo os comandos e as configurações de IP personalizadas.
Estrutura básica dos comandos
Para criar uma rede personalizada, use o comandodocker network create. Isso permite definir o driver de rede, a sub-rede e outras opções para controlar melhor a comunicação entre os contêineres.
Aqui está um exemplo simples usando o padrão bridge :
$ docker network create demo-network -d bridge
Esse comando cria uma rede bridge chamada demo-network. O Docker manda um ID de rede único como confirmação. Neste ponto, a rede já existe, mas ainda não conecta nenhum contêiner.
Você pode ver as redes que já existem com:
$ docker network ls
Para conectar um contêiner à sua nova rede, use o sinalizador --network:
$ docker run -it --rm --name container1 --network demo-network busybox:latest
Para adicionar um contêiner que já existe a uma rede:
$ docker network connect demo-network container2
E pra tirar isso:
$ docker network disconnect demo-network container2
Por fim, quando a rede não for mais necessária, você pode removê-la:
$ docker network rm demo-network
Para limpar todas as redes que não estão sendo usadas:
$ docker network prune
Gerenciamento avançado de endereços IP
Quando você tá trabalhando com sistemas maiores ou políticas de rede específicas, o Docker te deixa gerenciar manualmente intervalos de endereços IP dentro de redes personalizadas.
Você pode definir uma sub-rede e um gateway usando os sinalizadores --subnet e --gateway:
$ docker network create \
--driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.1 \
custom-network
Para ter ainda mais controle, use:
--ip-range: Dá um conjunto de IPs que os contêineres podem pegar de forma dinâmica, separado do intervalo completo da sub-rede.--aux-address: Reserve endereços IP específicos dentro da sub-rede para sistemas externos ou para fins de documentação.
Por exemplo:
$ docker network create \
--driver bridge \
--subnet 192.168.200.0/24 \
--ip-range 192.168.200.128/25 \
--aux-address reserved=192.168.200.254 \
advanced-network
Essa configuração:
- Limita os IPs dinâmicos do contêiner à metade superior da sub-rede.
- Evita que o IP seja usado por outro.
- Garantir um comportamento de rede consistente em ambientes complexos.
Se precisar de mais exemplos guiados, dá uma olhada nas estratégias de configuração avançadas em 10 ideias de projetos Docker: Do iniciante ao avançado.
Rede em modo enxame
O modo Docker Swarm permite a implantação orquestrada de serviços em um cluster de hosts Docker. Uma parte importante dessa organização é a rede, que garante que os serviços em diferentes nós possam se comunicar de forma segura e sem problemas.
Arquiteturas de rede com reconhecimento de enxames
O Docker Swarm é a solução de clustering nativa do Docker que transforma um conjunto de hosts Docker em um único mecanismo virtual. Permite implantar e gerenciar contêineres como serviços distribuídos. Um dos seus pontos fortes é a rede multi-host, que permite que serviços em máquinas diferentes se comuniquem como se estivessem no mesmo host.
A rede em enxame suporta dois tipos principais de tráfego:
- Controle do tráfego do plano de controle – comunicação gerenciada e criptografada entre os nós do Docker.
- Tráfego do plano de dados – comunicação entre contêineres e acesso a serviços externos.
O Swarm usa redes de sobreposição para dar suporte à comunicação entre serviços de nós e malha de roteamento para equilibrar a carga do tráfego externo entre réplicas de serviços.
Criando redes em enxame
Para dar suporte à descoberta de serviços e garantir a comunicação segura entre vários hosts, o Docker Swarm usa redes de sobreposição com um escopo de swarm. Eles podem ser criados manualmente ou automaticamente quando os serviços são iniciados.
Veja como criar uma rede de sobreposição com escopo de enxame:
$ docker network create \
--driver overlay \
--scope swarm \
my-overlay
Essa rede não é só de um único host; qualquer nó que estiver participando do enxame pode conectar contêineres a ela. Você pode dar uma olhada usando:
$ docker network inspect my-overlay
Personalizando redes de sobreposição
As redes de sobreposição suportam configurações avançadas, tais como:
$ docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--gateway 10.0.9.99 \
--opt encrypted \
my-secure-overlay
--subnete--gatewaydefinem a topologia da rede.--opt encryptedativa a criptografia IPSEC para o tráfego de contêineres.--scope swarmé aplicado automaticamente com o driver de sobreposição no modo swarm.
Entendendo os sinalizadores --scope e --attachable
--scope swarm: Mostra que a rede está disponível em todos os nós do enxame. Só os serviços em enxame (não os contêineres independentes) podem usar essa rede, a menos que--attachableseja especificado.--attachable: Permite que contêineres independentes entrem numa rede com escopo de enxame. Ótimo pra depurar ou acessar temporariamente um contêiner.
Por exemplo:
$ docker network create \
--driver overlay \
--attachable \
my-dev-overlay
Isso permite que você conecte contêineres normais a uma rede de enxame, além de serviços.
Configuração e validação da rede
Você precisa garantir que suas redes Docker estejam configuradas corretamente para que os contêineres possam se comunicar direitinho, ter a segurança necessária e oferecer serviços com bom desempenho. O Docker tem várias ferramentas e comandos pra revisar, resolver problemas e validar suas configurações de rede.
Verificação da configuração da rede
Para ver os detalhes de configuração de qualquer rede Docker, use o comando docker network inspect. Você vai receber uma saída JSON detalhada que inclui:
- Driver de rede (
bridge,overlay, etc.) - Como configurar sub-redes e gateways
- Escopo (
local,swarm) - Contêineres conectados e seus endereços IP
- Acesso interno ou externo
- Opções específicas do driver (por exemplo, IDs VXLAN para redes de sobreposição)
Por exemplo, você poderia fazer algo assim:
$ docker network inspect my-network
Procure campos importantes como:
- “Motorista”: Garantir que o tipo de rede que você queria foi criado.
- “IPAM”: Confirma as configurações de gerenciamento de endereços IP, incluindo sub-redes ou gateways personalizados.
- “Contêineres”: Mostra quais contêineres estão conectados e os IPs que foram atribuídos a eles.
- “Opções”: Mostra configurações avançadas como criptografia (criptografado: verdadeiro) ou tamanho MTU.
Técnicas de validação
Para confirmar se a sua rede está funcionando como esperado:
- Primeiro, você precisa conferir a configuração do IPAM. Dá uma olhada na seção “IPAM” na saída de inspeção da rede do Docker. Dá uma olhada se a sub-rede e o gateway estão certos pra configuração que você quer. Sub-redes mal configuradas podem causar problemas de conectividade ou conflitos de IP.
- Depois, você precisa verificar os identificadores VXLAN (só Overlay). As redes Overlay usam VXLAN pra encapsular o tráfego de contêineres em vários hosts. Dá uma olhada na seção “Opções” pra ver se tem chaves como:
"com.docker.network.driver.overlay.vxlanid_list": "4097"
Isso confirma que o túnel VXLAN está ativo e configurado corretamente. Se estiverem faltando ou errados, os serviços podem não estar acessíveis entre os nós.
- Por fim, teste a conectividade entre contêineres. A partir de um contêiner, tente fazer ping ou acessar outro contêiner pelo nome ou IP. Isso confirma que a resolução DNS e o roteamento interno estão funcionando:
$ docker exec -it container1 ping container2
Verifique o comportamento do DNS
Os contêineres conectados a redes definidas pelo usuário usam o servidor DNS embutido do Docker. Para confirmar, dá uma olhada no arquivo /etc/resolv.conf dentro do contêiner e testa a resolução dos nomes dos serviços.
Validar o roteamento do gateway
Para contêineres em várias redes, o Docker escolhe o gateway padrão com base na gw-priority mais alta. Para garantir o roteamento correto, atribua prioridades explícitas durante a criação do contêiner:
$ docker run --network name=public,gw-priority=1 --network private mycontainer
Use registros e ferramentas de diagnóstico
Fica de olho nos logs dos contêineres pra ver se tem algum erro de conexão e usa ferramentas como curl, dig e ip a dentro dos contêineres pra fazer um debug mais detalhado.
Então, pra resumir, validar suas configurações de rede do Docker ajuda a garantir uma comunicação tranquila entre os contêineres e minimiza falhas inesperadas em aplicativos com vários serviços.
E isso nos leva à próxima seção.
Otimização de segurança e desempenho
A rede de contêineres de verdade é mais do que só métodos de comunicação. Em muitos casos, ele dá o isolamento necessário e ainda garante que o desempenho seja o melhor possível. Quando você tá protegendo sua arquitetura e oferecendo um serviço, a segmentação e a taxa de transferência podem ajudar.
Estratégias de segmentação de rede
A segmentação de rede é uma prática fundamental e um método de segurança para aplicativos em contêineres. Ao colocar os contêineres em redes Docker diferentes, você consegue separar coisas que se misturam, tipo a segmentação de serviços com um front-end, um back-end e um banco de dados. Isso pode ajudar a reduzir os riscos de exposição e possíveis ataques.
Você pode usar redes definidas pelo usuário para ajudar a gerenciar os limites de comunicação. Os contêineres em redes diferentes não conseguem se comunicar entre si, a menos que você os conecte explicitamente. Por exemplo, se você colocar seu contêiner de banco de dados em uma rede só interna, seus serviços públicos não vão conseguir acessá-lo direto.
Regras e controles de firewall integrados
Por padrão, o Docker usa regras do iptables pra limitar os pontos de comunicação entre os contêineres e o mundo lá fora.
Algumas maneiras de ampliar essa segmentação incluem:
- Desativando a comunicação entre contêineres na rede de ponte padrão:
{
"icc": false
}
- Adicione isso ao arquivo “
daemon.json” do daemon do Docker para impedir que os contêineres se comuniquem, a menos que estejam na mesma rede definida pelo usuário. - Limitando recursos e privilégios usando sinalizadores como
--cap-drop,--read-onlye--no-new-privileges. - Usando redes de sobreposição no modo Swarm para comunicações de serviço criptografadas e com escopo definido em vários hosts.
Técnicas de otimização de desempenho
Tem várias maneiras de melhorar o desempenho usando a otimização com o Docker.
Melhorando a taxa de transferência da rede
Escolher o driver de rede certo tem um impacto direto no desempenho. Por exemplo:
- Use o driver do host quando for preciso uma comunicação com baixa latência e alta taxa de transferência, e o isolamento da rede não for uma prioridade.
- É melhor usar bridge pra ambientes locais e isolados.
- Use o macvlan quando os contêineres precisarem funcionar como dispositivos físicos na sua rede.
Evite sobrecarregar a ponte padrão ponte e crie redes separadas para serviços pesados ou agrupamentos lógicos.
Perfil de desempenho com iperf3 e métricas
Para medir o desempenho da rede, use ferramentas de perfilagem como iperf3:
# Start server in container1
docker run -it --rm --name server --network my-net networkstatic/iperf3 -s
# Run client in container2
docker run -it --rm --network my-net networkstatic/iperf3 -c server
Você também pode monitorar as estatísticas da rede usando:
docker stats– CPU, memória e E/S de rede em tempo real.- Prometheus + cAdvisor – Para métricas de séries temporais e monitoramento de longo prazo.
- Scripts ou agentes personalizados que exportam métricas do
/proc/net/devde dentro dos contêineres.
A criação regular de perfis ajuda a detectar gargalos logo no começo e orientar as decisões sobre a colocação de contêineres, a escolha de drivers ou as atualizações da rede do host.
Resolução de problemas de rede
Mesmo com as melhores práticas, podem surgir problemas de rede. Diagnosticar e resolver esses problemas rapidamente é essencial para manter o tempo de atividade do serviço. Essa seção traz ferramentas e técnicas pra identificar e resolver problemas comuns de rede no Docker.
Como descobrir se tem algum problema com a rede
Um contêiner mínimo pode não ter ferramentas como ping, dig ou netstat, o que pode dificultar a resolução de problemas. Em vez de mexer no contêiner, abre um novo que compartilhe o mesmo espaço de nomes de rede:
docker run -it --network container:my-container alpine
Depois, instale as ferramentas de rede:
apk add --no-cache iproute2 bind-tools net-tools
Se preferir, dá uma olhada no nicolaka/netshoot, uma imagem feita especialmente com várias ferramentas de diagnóstico:
docker run -it --rm --network container:my-container nicolaka/netshoot
Ferramentas como ip, nslookup, netstat e traceroute vão ajudar a identificar problemas de roteamento ou DNS.
Resolvendo problemas de conexão
Algumas causas comuns e suas soluções:
- Falhas na resolução do DNS: Certifique-se de que o contêiner esteja em uma rede definida pelo usuário para aproveitar o DNS integrado do Docker. Dá uma olhada no arquivo /etc/resolv.conf e usa o dig ou o nslookup pra testar a resolução de nomes.
- Incompatibilidade de MTU: Os contêineres em redes ou hosts diferentes podem ter perda de pacotes por causa de MTUs incompatíveis. Diminua o MTU em redes de sobreposição se estiver usando tunelamento:
docker network create --driver overlay --opt com.docker.network.driver.mtu=1200 my-overlay
Sub-redes em conflito
Evite sobrepor sub-redes nas redes Docker ou com as redes físicas do seu host. Use --subnet para definir intervalos que não entrem em conflito.
Portas bloqueadas pelo firewall do host
Verifique se as portas necessárias do Docker estão abertas:
- 2377 (Gerenciamento de enxames)
- 7946 TCP/UDP (descoberta de contêineres)
- 4789 UDP (dados sobrepostos)
A resolução eficaz de problemas combina diagnósticos com uma boa compreensão de como os contêineres interagem com suas redes. Com as ferramentas e a abordagem certas, a maioria dos problemas pode ser isolada e resolvida em poucos minutos.
Conclusões
A rede Docker é um componente essencial das arquiteturas em contêineres, permitindo uma comunicação segura, eficiente e escalável entre serviços, seja eles executados em um único host ou em um cluster distribuído.
Com suporte integrado para vários drivers de rede, gerenciamento de IP personalizável e redes de sobreposição nativas do Swarm, o Docker permite que desenvolvedores e equipes de DevOps isolem cargas de trabalho, controlem o fluxo de dados e otimizem o desempenho em ambientes complexos.
Não é uma solução única para todos, mas, quando usada com cuidado, oferece recursos robustos para criar microsserviços modernos, pipelines de automação e sistemas distribuídos seguros.
Quer continuar aprimorando suas habilidades com Docker e conteinerização?
Aqui estão alguns recursos super recomendados pra continuar sua jornada de aprendizado:
- Introdução ao Docker: Comece com o básico sobre contêineres e gerenciamento de imagens.
- Docker intermediário: Mergulhe mais fundo em redes, volumes e orquestração de vários contêineres com o Docker Compose.
- Introdução ao Kubernetes: Aprenda a usar e gerenciar contêineres em grande escala com o Kubernetes.
- Docker Compose vs Kubernetes: Uma comparação detalhada: Entenda as diferenças e decida qual ferramenta de orquestração é a melhor para você.
- 10 ideias para projetos Docker: Do iniciante ao avançado: Use suas habilidades com projetos reais pra se inspirar.
Perguntas frequentes sobre como criar redes no Docker
Pra que serve o comando Docker network create?
É usado pra definir e configurar redes Docker personalizadas, permitindo que os contêineres se comuniquem de forma segura e eficiente.
Quais são os principais tipos de drivers de rede do Docker?
Os principais drivers incluem bridge, host, none, overlay, macvlan e ipvlan, cada um oferecendo diferentes níveis de isolamento e conectividade.
Quando devo usar uma rede overlay no Docker?
As redes de sobreposição são ótimas pra comunicação entre vários hosts, principalmente em ambientes Docker Swarm ou Kubernetes.
Como posso verificar se uma rede Docker está configurada corretamente?
Use o Docker network inspect, confira as configurações de IPAM e VXLAN e teste a conectividade do contêiner usando o ping ou ferramentas DNS.
Quais ferramentas ajudam a diagnosticar problemas de rede no Docker?
Ferramentas como nicolaka/netshoot, dig, nslookup, iperf3 e logs de contêineres são úteis para resolver problemas comuns, como falhas de DNS ou incompatibilidades de MTU.
Josep é cientista de dados e gerente de projetos no Conselho de Turismo da Catalunha, usando dados para melhorar a experiência dos turistas na Catalunha. Sua experiência inclui o gerenciamento de armazenamento e processamento de dados, juntamente com análises avançadas e a comunicação eficaz de insights de dados.
Ele também é um educador dedicado, lecionando no programa de mestrado em Big Data da Universidade de Navarra e contribuindo regularmente com artigos perspicazes sobre ciência de dados para o Medium e o KDNuggets.
Ele é bacharel em Engenharia Física pela Universidade Politécnica da Catalunha e mestre em Sistemas Interativos Inteligentes pela Universidade Pompeu Fabra.
Atualmente, ele está empenhado em tornar as tecnologias relacionadas a dados mais acessíveis a um público mais amplo por meio da publicação ForCode'Sake no Medium.





