2014년 11월 23일 일요일

IP 주소로 Windows용 Boot2Docker 외부에서 Container로 접속하기

Windows 환경에서 Docker는 Boot2Docker 커맨드라인 툴을 통해 가상화된 Linux에서 실행된다.


Boot2Docker Start 아이콘을 실행하면 위와 같은 화면이 나오고 이제 마음 것 docker 명령어를 이용할 수 있다.


실제로 Docker가 실행되는 가상화된 Linux는 Boot3Docker와 같이 설치되는 Oracle VIrtualBox 상에서 실행된다. ifconfig를 실행하면 다음과 같은 네트워크 정보를 알 수 있다.


docker0는 Docker 컨테이너들 간에 연결된 네트워크이고 eth0는 VirtualBox NAT에 연결되어 호스트(Windows)의 인터넷과 연결에 사용되고 eth1은 호스트에 설치된 가상 네트워트 아답터와 매핑되어 호스트에서 Boot2Docker에 연결할 때 사용된다.


위와 같은 호스트와 게스트의 네트워트 관계에서 호스트의 Host Only Network를 통해서 직접 게스트의 docker0 네트워크 IP에 접근할 수 없기 때문에 위의 점선과 같이 호스트의 라우팅 테이블을 수정해서 호스트의 어플리케이션이 docker 컨테이너에 접근할 수 있도록 한다.


관리자모드로 커멘드 창을 열고 route print하여 인터페이스 목록에서 위에서 확인한 VirtualBox Host-Only Ethernet Adapter #2의 인터페이스 아이디 32를 확인하고 아래와 같이 입력한다.

route -p add 172.17.0.0 mask 255.255.0.0 192.168.59.103 IF 32

간단히 설명하면 192.168.59.3이 할당된 인터페이스로 172.17.0.0으로 시작하는 IP 주소에 대한 모든 요청을 192.168.59.103 인터페이스로 돌아서 요청하라는 의미이다. -p 옵션을 주어 이 설정을 영구적으로 적용하게 하였다. 테스트로 아래와 같이 CouchBase 컨테이너를 하나 생성해본다.

docker run -d -p 11210:11210 -p 8091:7081 -p 8092:8092 dustin/couchbase

생성된 CouchBase 컨테이너는 IP 주소 172.17.0.2부터 차례로 할당되고 다음과 같이 호스트에서 CouchBase Console에 접속이 가능함을 확인할 수 있다.

댓글 3개:

  1. 안녕하세요! 도커를 공부하고 있는 학생입니다.
    ubuntu network 설정창에서 호스트 전용 어댑터를 추가하였는데,
    cmd 창에서 Host-Only Ethernet Adapter #2가 보이지 않습니다.
    처음 하는 거라서 많은 어려움을 겪고 있는데
    답변 주시면 감사하겠습니다!!

    답글삭제
  2. 안녕하세요, 글을 짧게 쓰려다 보니 혼란을 드린 것 같습니다.
    Boot2Docker를 최초로 실행하게되면 VirtualBox에 boot2docker-vm이라는 이름으로 가상머신을 자동으로 생성합니다. 이 때, Host(Windows)에 필요하다면 가상 네트워크 인터페이스를 만들고 boot2docker-vm과 네트워크를 맺게됩니다. VirtualBox에서 해당 VM을 선택하시고 '설정>네트워크>어댑터2'에서 확인하시면 어떤 이름으로된 가상 네트워크 인터페이스를 사용하고 있는지 확인할 수 있습니다.

    답글삭제
  3. 안녕하세요, 개발환경 셋팅용으로 도커를 검토중인데
    윈도우 호스트와 도커간의 네트워크 설명이 큰 도움이 되었습니다.
    정말 감사드립니다 ^_____^

    답글삭제