Docker para Desenvolvedores - Parte 4: Trabalhando com Redes
Na Parte 3 desta série, vimos como persistir dados com volumes. Agora vamos abordar outro pilar fundamental de aplicações com múltiplos containers: a rede. Quando uma aplicação depende de vários serviços (por exemplo, uma API que precisa conversar com um banco de dados), esses containers precisam conseguir se comunicar entre si, e é isso que as redes do Docker viabilizam.
Listando redes
O Docker já cria algumas redes padrão na instalação (bridge, host, none). Para listar as redes existentes:
$ docker network ls
Criando uma rede
Para criar uma rede customizada, isolada das demais:
$ docker network create <nome_da_rede>
Containers conectados à mesma rede customizada conseguem se comunicar entre si usando o nome do container como hostname, sem precisar descobrir ou fixar endereços IP manualmente.
Inspecionando uma rede
Para ver detalhes de uma rede, como o range de IPs, driver usado e quais containers estão conectados a ela:
$ docker network inspect <nome_da_rede>
Rodando um container já conectado a uma rede
Para criar um container e já conectá-lo a uma rede específica no momento da criação:
$ docker run -it -d --rm --net <nome_da_rede> httpd
Conectando um container já em execução a uma rede
Se o container já está rodando e você quer adicioná-lo a uma rede adicional (um container pode pertencer a múltiplas redes simultaneamente):
$ docker network connect --ip 192.168.100.10 <nome_da_rede> httpd
A flag --ip permite fixar um IP específico para o container dentro dessa rede, útil quando outras aplicações precisam de um endereço previsível para se conectar.
Desconectando um container de uma rede
$ docker network disconnect <nome_da_rede> httpd
Removendo uma rede
$ docker network rm <nome_da_rede>
Uma rede só pode ser removida se não houver nenhum container conectado a ela no momento.
Limpando redes não utilizadas
Assim como acontece com volumes, é comum acumular redes órfãs ao longo do tempo. Para remover todas as redes que não estão sendo usadas por nenhum container:
$ docker network prune
Por que isso importa
Rodar containers isolados, sem uma rede customizada, funciona para testes rápidos, mas assim que uma aplicação precisa de múltiplos serviços conversando entre si (app + banco de dados + cache, por exemplo), redes customizadas deixam de ser opcionais. Elas garantem isolamento (containers de projetos diferentes não se enxergam por padrão) e comunicação simples por nome, sem depender de IPs fixos gerenciados manualmente.
Próximos passos
Com volumes para persistência e redes para comunicação entre containers, já temos as duas peças fundamentais para rodar aplicações multi-serviço. Na Parte 5 desta série, vamos falar sobre gerenciamento de imagens: como construir, versionar (tag) e publicar suas próprias imagens em um registry.
Continua na Parte 5.
Top comments (0)