외부에서 도커 컨테이너 접근하기
컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당받습니다.
기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당합니다.
컨테이너를 생성하고, ifconfig 명령어로 컨테이너의 네트워크 인터페이스를
확인하였습니다.
도커의 NAT IP인 172.17.0.2를 할당받은 eth0 인터페이스와 로컬 호스트인 lo
인터페이스가 있습니다. 아무런 설정을 하지 않았다면 이 컨테이너는
외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근할 수 있습니다.
외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0의 IP와 포트를
호스트의 IP와 포트에 바인딩해야 합니다.
컨테이너에서 호스트를 빠져나온 뒤,
-p 옵션을 추가하여 컨테이너를 생성했습니다. -p 옵션은 컨테이너의 포트를
호스트의 포트와 바인딩해 연결할 수 있게 설정합니다.
[호스트의 포트]:[컨테이너의 포트]
즉, 호스트의 포트 8000과 컨테이너의 포트 80번을 연결하려고 하면 8000:80
이렇게 입력하며 호스트의 특정 IP를 사용하려면 192.168.0.100:8000:80과
같이 바인딩할 IP와 포트를 명시합니다. 또한 여러개의 포트를 외부에
개방하려면 -p 옵션을 여러 번 써서 설정합니다.
+————————————–+————————————–+
| 1 | # docker run -i -t -p 3306:3306 |
| | -p 7777:80 ubuntu:14.04 |
+————————————–+————————————–+
아파치 웹 서버는 기본적으로 80번 포트를 사용하므로 여기서는 컨테이너의
80번 포트를 호스트와 같이 연결합니다.
그리고 아래 명령어들로 아파치 서버를 시작합니다.
+————————————–+————————————–+
| 123 | root@9705c91b767b:/# apt-get upd |
| | ateroot@9705c91b767b:/# apt-get inst |
| | all apache2 -yroot@9705c91b767b:/# s |
| | ervice apache2 start |
+————————————–+————————————–+
아파치 서버가 실행이 완료되면, 호스트의 ip주소:7777(80) 으로 접근합니다.
아까 -p 7777:80 으로 연결을 시켜줬기 때문입니다. (호스트의 포트 7777은
도커의 포트 80번과 연결된다는 의미, 포트 80을 입력해도 연결됨)
아파치 웹 서버는 172 대역을 가진 컨테이너의 NAT IP와 80번 포트로
서비스하므로 여기에 접근하려면 172.17.0.x 와 포트 80번으로 접근해야
하지만, 포트포워딩 옵션인 -p로 호스트와 컨테이너를 연결했으므로 호스트의
ip를 통해 172.17.0.x:80으로 접근이 가능해 졌습니다.
위키 북스의 시작하세요 도커/쿠버네티스를 읽고 작성하였습니다.