docker network
Introdução ao Docker Networking
O Docker Networking é uma parte crucial para o funcionamento de containers em ambientes isolados, permitindo a comunicação tanto entre containers quanto entre containers e o mundo exterior. Quando você inicia um container no Docker, ele é automaticamente conectado a uma rede, que pode ser a padrão ou uma customizada, dependendo das suas necessidades.
Tipos de Redes no Docker
O Docker oferece várias opções de rede para acomodar diferentes cenários de aplicação:
Bridge Network:
A bridge
é a rede padrão quando um container é criado, ideal para casos onde os containers precisam se comunicar entre si no mesmo host. Ela age como uma rede interna que permite a comunicação entre containers sem expô-los diretamente à rede externa. Por exemplo, ao iniciar um container com o comando:
Aqui, o container "webapp" é conectado à rede my_bridge
, que é uma rede bridge
criada anteriormente. Os containers nessa rede podem se comunicar entre si usando seus nomes.
Host Network
Ao usar a rede host
, o container compartilha a stack de rede do host, o que significa que ele não tem um namespace de rede isolado. Isso pode ser útil para otimizar a performance em situações onde a latência de rede é crítica. Para utilizar a rede host, o comando seria:
Nesse caso, o NGINX dentro do container escutará diretamente nas portas do host, sem qualquer isolamento.
Overlay Network
A rede overlay
é essencial para comunicação entre containers que estão em diferentes hosts dentro de um cluster Docker Swarm. Ela permite criar uma rede distribuída, conectando containers em diferentes nós do Swarm. Um exemplo de uso seria:
Esse comando cria uma rede overlay chamada my_overlay
, que pode ser usada para interligar serviços em um cluster Swarm.
Macvlan Network
A rede macvlan
é usada para atribuir um endereço MAC real a cada container, permitindo que ele seja tratado como um dispositivo físico na rede. Isso é útil quando você quer integrar containers diretamente à rede física, sem NAT. A criação de uma rede macvlan
pode ser feita assim:
Nesse exemplo, a rede macvlan
my_macvlan
é criada, e containers conectados a ela estarão diretamente acessíveis na rede 192.168.1.0/24
.
Gerenciamento de Redes no Docker
Criar e Gerenciar Redes
Você pode criar redes customizadas para atender a requisitos específicos de aplicação. Por exemplo, para criar uma rede bridge
personalizada:
Depois de criar a rede, você pode conectar containers a ela durante a execução, ou mesmo depois:
Esse comando conecta o container webapp
à rede my_custom_bridge
.
Inspecionar Redes
Para verificar detalhes sobre uma rede, como os containers conectados e as configurações de IP, você pode usar:
Esse comando retorna informações detalhadas sobre a rede, permitindo verificar a conectividade e os parâmetros configurados.
Remover Redes
Se uma rede não estiver mais em uso, você pode removê-la para liberar recursos:
Isso remove a rede my_custom_bridge
, desde que nenhum container esteja conectado a ela.
Configurações Avançadas
DNS e Subnetting
O Docker gerencia automaticamente o DNS para os containers, permitindo que eles se resolvam mutuamente por nome. No entanto, você pode personalizar as configurações de DNS se necessário. Além disso, a configuração de subnets customizadas pode ser crucial para cenários mais complexos:
Aqui, a rede my_network
é criada com um range de IPs específico, garantindo que você tenha controle sobre a alocação de IPs.
Segurança em Redes Docker
O isolamento das redes e a configuração adequada de regras de firewall são fundamentais para proteger os containers. As regras de firewall podem ser aplicadas no nível do host para controlar o tráfego entre redes diferentes.
Exemplos Práticos
Para ilustrar a aplicação de conceitos, considere a configuração de uma aplicação web multicontainer onde o frontend e o backend precisam se comunicar:
Crie uma rede customizada:
Inicie o backend conectado a essa rede:
Inicie o frontend, conectando-o à mesma rede:
Os containers backend
e frontend
podem agora se comunicar entre si usando seus nomes como hostnames, enquanto o frontend está acessível externamente na porta 8080 do host.
Conclusão
O Docker Networking é um componente essencial para a arquitetura de containers, permitindo uma vasta gama de configurações para atender diferentes requisitos de rede. Desde o uso básico de redes bridge até a configuração avançada de overlays em clusters Swarm, o domínio do Docker Networking é crucial para a criação de ambientes containerizados seguros e escaláveis.
Last updated