Comparando Desempenho e Comportamento de Rede
Agora, vamos executar alguns testes para ver as diferenças práticas entre as redes bridge e host no Docker.
Testando o Desempenho da Rede
Primeiro, vamos criar um contêiner com rede bridge e outro com rede host, e então comparar seu desempenho.
- Vamos parar e remover o contêiner nginx anterior:
docker stop nginx-host
docker rm nginx-host
- Crie um novo contêiner com rede bridge para testar o desempenho:
docker run --name bridge-test -d --network bridge nginx:alpine
- Crie outro contêiner com rede host:
docker run --name host-test -d --network host nginx:alpine
- Vamos usar
docker exec para executar um teste de rede simples em cada contêiner:
Para o contêiner de rede bridge:
docker exec bridge-test sh -c "time wget -q -O /dev/null http://google.com"
Para o contêiner de rede host:
docker exec host-test sh -c "time wget -q -O /dev/null http://google.com"
Compare os tempos de execução. Tipicamente, o contêiner de rede host terá um desempenho ligeiramente melhor porque evita a camada de rede adicional.
Examinando as Interfaces de Rede
Vamos examinar as interfaces de rede em ambos os contêineres:
- Para o contêiner de rede bridge:
docker exec bridge-test ip addr show
Você verá que este contêiner tem suas próprias interfaces de rede, isoladas do host.
- Para o contêiner de rede host:
docker exec host-test ip addr show
Você notará que este contêiner tem exatamente as mesmas interfaces de rede que o sistema host, incluindo todas as interfaces de rede físicas.
- Compare com as interfaces de rede do host:
ip addr show
As interfaces do contêiner de rede host devem corresponder às do sistema host.
Entendendo Conflitos de Porta
Ao usar a rede host, conflitos de porta podem ocorrer se o contêiner tentar usar portas já em uso no host:
- Pare e remova todos os contêineres em execução:
docker stop bridge-test host-test
docker rm bridge-test host-test
- Inicie um serviço no host usando a porta 8080:
python3 -m http.server 8080 &
- Agora, tente executar um contêiner com rede host que também deseja usar a porta 8080:
docker run --name conflict-test --network host -d -p 8080:80 nginx:alpine
Você deve ver um erro porque a porta 8080 já está em uso no host.
- Limpe o servidor HTTP Python:
kill %1
Isso demonstra uma desvantagem potencial da rede host - você precisa estar ciente de conflitos de porta com o host.