2015년 3월 23일 월요일

Docker 컨테이너 연결하기

1.  컨테이너 연결하기

웹 서버 컨테이너와 DB 컨테이너가 있을 때 웹 서버 컨테이너에서 DB 컨테이너에 접근할 수 있어야 합니다. 이 때에는 docker run 명령에서 --link 옵션을 사용하여 컨테이너를 연결합니다.
먼저 DB 이미지를 컨테이너로 실행합니다. 이번에는 MongoDB를 사용해보겠습니다.
$ sudo docker run --name db -d mongo
DB 컨테이너 이름은 db로 설정하였습니다.
이제 web 컨테이너를 생성하면서 db 컨테이너와 연결합니다. 웹 서버로 사용할 컨테이너는 nginx 이미지로 생성하겠습니다.
$ sudo docker run --name web -d -p 80:80 --link db:db nginx
--link <컨테이너 이름>:<별칭> 형식입니다.
컨테이너 목록을 출력합니다.
$ sudo docker ps
CONTAINER ID  IMAGE         COMMAND               CREATED      STATUS        PORTS               NAMES
3971618834cd  nginx:latest  nginx                 About a min  Up About a m  0.0.0.0:80->80/tcp  web
8d4031106c57  mongo:2.6     /usr/src/mongo/docke  4 minutes a  Up 4 minutes  27017/tcp           db,web/db
db 컨테이너와 web 컨테이너가 연결되었습니다. web/db라고 표시되는데 web 컨테이너에서 db 컨테이너에 접속할 수 있다는 것입니다.
이제 web 컨테이너 안에서 db:27017 주소로 db 컨테이너의 MongoDB에 접속할 수 있습니다.
mongodb://db:27017/exampledb
<별칭>:<포트 번호> 형식입니다.
________________________________________
참고
다음과 같이 docker inspect 명령으로 web 컨테이너의 세부 정보에서 hosts 파일 경로를 구한 뒤 cat 명령으로 내용을 살펴봅니다(`는 탭키 위에 있는 문자입니다).
$ cat `docker inspect -f "{{ .HostsPath }}" web`
172.17.0.13     aa1982fed33e
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.12     db
db --link db:db에서 설정한 별칭이고, 172.17.0.12 db 컨테이너의 IP 주소입니다.

컨테이너를 연결하면 이렇게 hosts 파일에 IP 주소가 자동으로 설정되기 때문에 별칭을 통해 연결한 컨테이너에 접속할 수 있습니다.

댓글 없음:

댓글 쓰기