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 |