Fundamentos da Rede Docker
Antes de mergulharmos nos tópicos mais complexos, é importante entender os conceitos fundamentais da rede no Docker.
- Bridge Network
Uma bridge network é a rede padrão criada quando você instala o Docker. Ela permite que os contêineres se comuniquem uns com os outros na mesma rede usando nomes de host.
Vamos criar uma rede bridge chamada “my_network” para demonstrar como funciona:
docker network create my_network
Agora, vamos executar dois containers nessa rede:
docker run --name container1 --network my_network -d nginx
docker run --name container2 --network my_network -d nginx
Os containers container1 e container2 podem se comunicar usando os nomes de host container1 e container2.
- Port Forwarding
O Docker permite que você encaminhe portas de contêineres para o host. Isso é útil quando você deseja acessar serviços dentro de um contêiner diretamente do seu sistema host.
Por exemplo, para encaminhar a porta 8080 do contêiner para a porta 80 do host:
docker run -d -p 8080:80 nginx
[!tip] Agora, você pode acessar o conteúdo do contêiner Nginx em http://localhost:8080 no seu navegador.
- Redes Personalizadas
As redes bridge são úteis, mas você também pode criar redes personalizadas para isolamento e maior controle. Por exemplo, você pode criar uma rede overlay para comunicação entre contêineres em diferentes hosts.
docker network create --driver overlay my_overlay_network
[!warning] You need the following ports open to traffic to and from each Docker host participating on an overlay network: TCP port 2377 for cluster management communications TCP and UDP port 7946 for communication among nodes UDP port 4789 for overlay network traffic
https://docs.docker.com/network/drivers/overlay/
Anexar e Desanexar Containers Link to heading
Para adicionar contêineres a uma rede existente, use o comando docker network connect:
docker network connect my_network container3
Para remover um contêiner de uma rede, use o comando docker network disconnect:
docker network disconnect my_network container3
IPvlan, Macvlan e None Network Link to heading
Além das redes bridge, overlay e personalizadas, o Docker oferece recursos avançados de rede que podem ser úteis em cenários mais complexos. Vamos explorar um pouco esses três recursos: IPvlan, Macvlan e None Network.
- IPvlan Network
A rede IPvlan permite que você atribua endereços IP individuais a cada contêiner, tornando-os acessíveis diretamente na rede externa. Isso é especialmente útil quando você deseja evitar a camada de encapsulamento da rede Docker e assim obter um melhor desempenho.
Exemplo de Uso do IPvlan
Primeiro, crie uma rede IPvlan:
docker network create -d ipvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my_ipvlan_network
Agora, inicie um contêiner com um IP específico dentro dessa rede:
docker run --name container_ipvlan --network my_ipvlan_network --ip=192.168.1.2 -d nginx
O contêiner container_ipvlan agora tem um endereço IP válido na rede externa.
- Macvlan Network
A rede Macvlan é semelhante à IPvlan, mas permite que cada contêiner tenha seu próprio endereço MAC. Isso é útil quando você precisa de isolamento de camada de link e um endereço MAC exclusivo para cada contêiner.
Exemplo de Uso do Macvlan
Crie uma rede Macvlan:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my_macvlan_network
Inicie um contêiner na rede Macvlan:
docker run --name container_macvlan --network my_macvlan_network -d nginx
Agora, o contêiner container_macvlan tem seu próprio endereço MAC e IP na rede externa.
- None Network
A rede None é uma rede que não fornece conectividade de rede externa para um contêiner somente a loopback é criada. Isso pode ser útil quando você deseja que um contêiner tenha sua rede desativada completamente, mas ainda esteja em execução.
Exemplo de Uso da None Network
Crie um contêiner com a rede None:
docker run --name container_none --network none -d nginx
O contêiner container_none não terá conectividade de rede externa, mas ainda pode ser usado para tarefas internas.
Network Scopes Link to heading
Os contêineres têm diferentes níveis de isolamento de rede. Eles podem estar em um escopo de rede global ou local. A rede bridge é um exemplo de escopo local, onde os contêineres podem se comunicar apenas na mesma máquina. As redes overlay são globais e permitem a comunicação entre hosts.
Comunicação entre Hosts Link to heading
Quando você tem contêineres em diferentes hosts, pode usar redes overlay para conectar os contêineres entre si. Para fazer isso, configure um serviço de descoberta de chave-valor como o Consul ou o etcd para que os contêineres possam se registrar e se descobrir em diferentes hosts.
Conclusão Link to heading
A rede no Docker é uma parte fundamental da orquestração de contêineres e da criação de aplicativos distribuídos. Neste artigo, exploramos alguns conceitos, como redes personalizadas, brigde, overlay, ipvlan, macvlan, none, além de fornecer exemplos básicos para ilustrar esses conceitos. Certifique-se de explorar a documentação do Docker https://docs.docker.com/network/ e experimentar os conceitos discutidos neste artigo em seu próprio ambiente de desenvolvimento para obter uma compreensão completa desses tópicos.