본문 바로가기

Container/Docker

15. Docker Network DNS

Docker DNS 
 
브릿지 네트워크에 속한 컨테이너가 서로 통신할 때  사실은 도커 호스트에 생성한 DNS 서버를 통해 
 
서비스의 이름을 관리해주며 각 컨테이너가 이 DNS 서버를 확인하여 다른 컨테이너와 통신할 수 있게 된다.
 
 
 
Docker DNS Round Robin 
 
결국 도커 호스트에 DNS 서비스가 있으므로 라운드 로빈 서비스를 이용할 수 있고
 
도커에서 이를 기본으로 제공한다.
 
라운드 로빈이란 하나의 도메인에 여러개의 IP 주소를 등록해  요청 순서대로 
 
각각 다른 IP 주소로 보내 (즉 다른 서버로 접속시켜) 부하를 분산하는 기술이다.
 
즉 Docker 컨테이너를 만들 때 두 개 이상의 컨테이너에 동일한 네트워크 별칭을 할당 할 수있는
 
옵션이 있어 컨테이너가 클라이언트 요청에 응답 할 수 있다.
 
이를 확인해 보기 위해 Elasticsearch Docker 컨테이너를 두개 만들고 클라이언트에서
 
실제로 같은 도메인 명으로 접근했을 때 여러 IP 로 Request 를 날리는지 간단히 확인해 보자.
 
 
 
먼저 새로운 브리지를 하나 만들자.
 
$ docker network create myTestNet
 
$ docker network ls
NETWORK ID          NAME             DRIVER            SCOPE
d71772f48c76         bridge             bridge             local
5aa21b69f1c4        myTestNet       bridge             local
625ca034a6a7         host                host                local
a3970a7db0b0        none               null                 local
 
이제 Elasticsearch 를 실행하는 2 개의 고정 컨테이너 만들어 보자. 
 
--net-alias 를 사용해서 이름이 서로 다른 컨테이너를
 
마치 하나의 도메인을 가지는 것처럼 네트워크 별칭을 주었다.
 
$ docker container run -d --name search1 --net-alias search --net myTestNet elasticsearch:2
$ docker container run -d --name search2 --net-alias search --net myTestNet elasticsearch:2
 
DNS에 Alpine Linux를 사용하여 Nslookup 실행하였을 때
 
실제 두개의 Address 를 얻는지 확인해 보자.
 
docker container run -it --rm --name client --net myTestNet alpine nslookup search
Name:      search
Address 1: 172.18.0.3 search2.my-net
Address 2: 172.18.0.2 search1.my-net
 
이번에는  CentOS에서 cURL을 실행하여 Elasticsearch 서버가 검색 요청에 응답하는 것을 확인해 보자.
 
cURL 을 날렸을 때 다른 이름을 던지면 의미가 서로 다른 IP 에서 응답을 주었다는 것이다.
 
docker container run -it --rm --name client --net my-net centos:7 bash
# curl -s search:9200
{
    "name" : "Magma",
    ...
}
 
# curl -s search:9200
{
    "name" : "Melee",
    ...
}
 

'Container > Docker' 카테고리의 다른 글

17. Docker Volume  (0) 2020.01.14
16. Docker Storage  (0) 2020.01.14
14. Docker Network Test  (0) 2020.01.14
13. Docker Network Overview  (0) 2020.01.14
12. Docker Compose  (0) 2020.01.14