5.1 Tipos principais de redes personalizadas
Redes personalizadas no Docker oferecem opções flexíveis para configurar e gerenciar a comunicação de rede entre containers. Elas permitem isolar containers, organizar a interação entre eles e criar topologias de rede complexas. Nesta aula, vamos ver como criar e configurar redes personalizadas no Docker, assim como exemplos de uso.
Tipos principais de redes personalizadas
O Docker suporta vários tipos de redes personalizadas, cada uma com suas características e destinada a diferentes cenários de uso:
-
Bridge (redes bridge)
: oferecem isolamento e conexão entre containers em um único host. Este tipo de rede é usado por padrão para aplicações locais que não precisam interagir além do host. -
Overlay (redes overlay)
: projetadas para conectar containers em hosts diferentes dentro de um cluster Docker Swarm ou Kubernetes. Elas fornecem alta escalabilidade e segurança para aplicações distribuídas. -
Macvlan
: permitem que containers usem diretamente a interface de rede física do host. Isso é útil para aplicações de rede com alto requisito de desempenho, assim como para casos em que é necessário associar a endereços MAC específicos. Containers em redes Macvlan podem interagir com outros dispositivos da rede física como se fossem nós separados. -
Host (redes do host)
: os containers utilizam a pilha de rede do host, eliminando a sobrecarga da virtualização de rede, mas reduzindo o isolamento. Este tipo de rede é adequado para aplicações que necessitam de desempenho máximo de rede.
5.2 Criando e usando redes bridge
Redes bridge são o tipo mais comum de redes personalizadas e são usadas para isolar containers em um único host. Containers conectados à mesma rede bridge podem interagir entre si por meio de endereços IP e nomes de hosts.
Criando uma rede bridge personalizada
Para criar uma rede bridge personalizada, use o comando docker network create
:
docker network create --driver bridge my_bridge_network
Executando containers em uma rede personalizada
Inicie os containers conectando-os à rede criada:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
Verificando a conectividade entre containers
Você pode usar o comando ping
para verificar a conectividade entre os containers:
docker exec container2 ping -c 4 container1
Se os containers estiverem corretamente conectados à rede my_bridge_network
, o comando ping
será bem-sucedido.
5.3 Redes personalizadas no Docker Compose
Exemplos de uso de redes personalizadas no Docker Compose
O Docker Compose facilita a criação e gerenciamento de redes para aplicações com múltiplos containers. Você pode definir redes personalizadas no arquivo docker-compose.yml
.
Exemplo de arquivo docker-compose.yml
:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Execute o Docker Compose:
docker compose up -d
Neste exemplo, ambos os serviços (web
e app
) estão conectados à rede personalizada my_bridge_network
.
5.4 Configurando e usando redes macvlan
As redes macvlan
permitem que os containers usem diretamente a interface de rede física do host, o que pode ser útil para aplicações que exigem alta performance de rede. Os containers em uma rede dessas recebem seus próprios endereços IP dentro da sub-rede especificada, tornando-os visíveis na mesma rede que o host.
Criando 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
Neste comando:
--subnet
: define a sub-rede onde os containers estarão localizados.--gateway
: especifica o gateway para os containers.-o parent
: indica a interface de rede do host à qual a rede será vinculada.
Rodando containers na rede macvlan
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
Neste exemplo, ambos os containers estão conectados à rede my_macvlan_network
e têm acesso à rede externa através da interface física eth0
.
5.5 Exemplos de uso no Docker Compose
Você também pode usar redes macvlan
no Docker Compose
. Por exemplo:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Execute o Docker Compose
:
docker compose up -d
Neste exemplo, a rede my_macvlan_network
permite que o serviço web
interaja com dispositivos na sub-rede 192.168.1.0/24
, incluindo o host.
Dicas práticas:
- Configuração de acesso: Certifique-se de que seu roteador ou administrador de rede permita o uso da sub-rede especificada nas configurações de
macvlan
. - Isolamento: Se a segurança for importante, use VLAN para segmentar a rede, garantindo que os containers tenham acesso apenas aos recursos necessários.
- Teste: Após a configuração, verifique a conectividade entre os containers e a rede externa usando comandos como
ping
oucurl
.
5.6 Exemplo de uso de redes para microservices
Vamos dar uma olhada em um exemplo onde temos frontend, backend e banco de dados isolados em diferentes redes, mas que ainda conseguem interagir através da interseção de redes.
Arquivo docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Inicie o Docker Compose
:
docker compose up -d
Nesse exemplo:
- O serviço
frontend
está conectado às redesfront-tier
eback-tier
, permitindo que ele interaja tanto com os clientes externos quanto com o backend. - O serviço
backend
está conectado às redesback-tier
edb-tier
, permitindo que ele interaja tanto com o frontend quanto com o banco de dados. - O serviço
database
está conectado apenas à rededb-tier
, o que garante o isolamento do banco de dados de acessos externos.
Dicas práticas:
- Use isolamento: Separar redes ajuda a limitar o acesso dos serviços aos bancos de dados ou outros recursos críticos.
- Teste a conexão: Certifique-se de que os serviços conseguem interagir uns com os outros através de redes comuns, usando comandos como
ping
oucurl
. - Otimize: Use a rede
overlay
, se o seu projeto for executado em um cluster ou em múltiplos hosts.
Este exemplo mostra como criar isolamento de rede e, ao mesmo tempo, habilitar a interação entre diferentes camadas de um aplicativo.
GO TO FULL VERSION