Neste artigos iremos falar sobre como usar o DNS em containers Docker:
É importante que você tenho visto os conteúdos sobre Redes Docker pra dar sequência na leitura deste artigo.
Sabemos da importância de ter um servidor DNS em nossa infraestrutura.
Quando iniciamos um container e não definimos uma rede, automaticamente ele é associado a rede padrão chamada bridge.
Entretanto está rede não possui um servidor DNS, consequentemente a comunicação poderá ser feita somente via IP.
Vamos testar:
1) Vamos criar dois containers:
docker container run -d --name webhost1 nginx:alpine docker container run -d --name webhost2 nginx:alpine
2) Vamos conectar no terminal do container e fazer um teste de ping:
docker container exec -it webhost1 sh / # ping webhost1 ping: bad address 'webhost1' / # ping webhost2 ping: bad address 'webhost2' / #
O teste de ping não funcionou.
3) Para ativar a comunicação por nome, devemos utiliza o parâmetro —link ao iniciar o container:
Então parar e remover esses containers e cria-los novamente agora fazendo um link entre eles.
docker container rm -f webhost1 webhost2 docker container run -d --name webhost1 nginx:alpine docker container run -d --name webhost2 --link webhost1 nginx:alpine
Desta forma o container webhost2 consegue se comunicar com o webhost1 via DNS:
docker container exec -it webhost2 ping webhost1 PING webhost1 (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.198 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.208 ms 64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.146 ms
Porém do webhost1 para webhost2 isso não funciona:
docker container exec -it webhost1 ping webhost2 ping: bad address 'webhost2'
Para que todos os containers possam se comunicar via DNS você deve associa-los a uma rede diferente da padrão.
4) Então vamos criar uma rede e os containers associados:
docker container rm -f webhost1 webhost2 docker network create -d bridge network_web docker container run -d --name webhost1 --network network_web nginx:alpine docker container run -d --name webhost2 --network network_web nginx:alpine
Vamos testar o ping via DNS:
docker container exec -it webhost1 ping webhost2 PING webhost02 (172.19.0.3): 56 data bytes 64 bytes from 172.19.0.3: seq=0 ttl=64 time=1.615 ms 64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.124 ms 64 bytes from 172.19.0.3: seq=2 ttl=64 time=0.213 ms
docker container exec -it webhost2 ping webhost1 PING webhost01 (172.19.0.2): 56 data bytes 64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.193 ms 64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.158 ms 64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.162 ms
Agora já sabemos como funciona a comunicação via DNS entre containers.
Espero que tenham gostado e até a próxima!
Gostou do nosso artigo sobre Como usar DNS em containers Docker? Compartilhe!