Introdução à Rede Bridge do Docker
A rede bridge do Docker é o modo de rede padrão que permite a comunicação entre contêineres através de uma chave virtual. Ela proporciona um ambiente de rede isolado, onde contêineres podem interagir entre si e com redes externas.
Princípios de Funcionamento da Rede Bridge
- Criação da bridge virtual: Ao iniciar o daemon do Docker, uma bridge virtual chamada
docker0é configurada no host. Essa bridge atua como uma rede interna, com intervalos IP privados como172.17.0.0/16ou192.168.2.0/24. - Interfaces de rede dos contêineres: Quando um contêiner é iniciado, o Docker gera um par virtual de interfaces de rede (veth pair). Uma extremidade é conectada à bridge
docker0, e a outra ao namespace de rede do contêiner. Cada contêiner recebe um IP exclusivo da sub-rede da bridge. - Tradução de Endereço de Rede (NAT): Para comunicação com redes externas, o Docker aplica NAT. Pacotes originados em contêineres têm seu IP de origem convertido para o IP do host. Pacotes destinados a contêineres são traduzidos para seus IPs inetrnos, ocultando-os do exterior.
- Mapeamento de portas: A opção
-pou--publishpermite vincular uma porta no host a uma porta no contêiner. Por exemplo,docker run -p 8080:80 nginxredireciona a porta 80 do contêiner para a porta 8080 do host.
Benefícios e Restrições da Rede Bridge
Benefícios: Isolamento entre contêineres via IPs privados, facilidade de gerenciamento para ambientes de teste, e segurança adicional proporcionada pelo NAT.
Restrições: Limitação no pool de endereços IP, podendo esgotar-se com muitos contêineres, e potencial sobrecarga de desempenho devido à tradução NAT em cenários de alto tráfego.
Personalizando Redes Bridge
Além da rede padrão, é possível criar bridges customizadas com o comando docker network create. Exemplo:
docker network create --driver bridge rede-experimental
Para conectar um contêiner a essa rede:
docker run --name app-contêiner --net=rede-experimental -d aplicativo-imagem
Conceito de Par Virtual de Ethernet (veth pair)
O veth pair é uma tecnologia do kernel Linux que emparelha duas interfaces de rede virtuais, permitindo comunicação entre namespaces de rede distintos.
- Definição: Par de interfaces virtuais conectadas diretamente; dados transmitidos em uma extremidade são recebidos na outra.
- Uso em contêineres: Ao criar um contêiner Docker, um veth pair é gerado. Uma interface é colocada no namespace do contêiner, e a outra na bridge
docker0do host. - Configuração: Criação via
ip link add veth-alpha type veth peer name veth-beta. Interfaces podem ser movidas para namespaces comip link set veth-beta netns ns1. Endereços IP são atribuídos comip addr add, e as interfaces são ativadas comip link set. - Verificação de conectividade: Utilize
pingentre namespaces para testar a comunicação.