외부에서 도커 컨테이너 접근하기

Posted by youmin park on 2021-02-09

외부에서 도커 컨테이너 접근하기

컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당받습니다.
기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당합니다.

컨테이너를 생성하고, ifconfig 명령어로 컨테이너의 네트워크 인터페이스를
확인하였습니다.

스크린샷 2021-02-08 오후 10 35
39

도커의 NAT IP인 172.17.0.2를 할당받은 eth0 인터페이스와 로컬 호스트인 lo
인터페이스가 있습니다. 아무런 설정을 하지 않았다면 이 컨테이너는
외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근할 수 있습니다.

외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0의 IP와 포트를
호스트의 IP와 포트에 바인딩해야 합니다.

컨테이너에서 호스트를 빠져나온 뒤,

스크린샷 2021-02-08 오후 10 41
46

-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번 포트를 호스트와 같이 연결합니다.

image

그리고 아래 명령어들로 아파치 서버를 시작합니다.

+————————————–+————————————–+
| 123 | root@9705c91b767b:/# apt-get upd |
| | ateroot@9705c91b767b:/# apt-get inst |
| | all apache2 -yroot@9705c91b767b:/# s |
| | ervice apache2 start |
+————————————–+————————————–+

스크린샷 2021-02-08 오후 11 49
27

아파치 서버가 실행이 완료되면, 호스트의 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으로 접근이 가능해 졌습니다.


위키 북스의 시작하세요 도커/쿠버네티스를 읽고 작성하였습니다.