Port Forwarding :: 컨테이너를 외부에 노출시키기

이주희·2022년 10월 26일
0

Docker

목록 보기
5/16

네트워크 인터페이스 확인하기

컨테이너는 가상 머신과 마찬가지로 가상 IP 주소를 할당받는다.

eth0

  • Ethernet
  • 네트워크 디바이스명
  • 랜카드의 지정 번지

lo

  • 로컬 호스트!
  • 컨테이너 생성 후 ifconfig 명령어를 통해
    도커의 NAT IP인 172.17.0.2를 할당받은 eth0 인터페이스와 로컬 호스트인 lo 인터페이스를 확인할 수 있다.
    NAT; Network Address Translation; 네트워크 주소 변환

  • 아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근할 수 없으며, 도커가 설치된 호스트에서만 접근할 수 있다. (Docker Desktop for Max에서는 호스트에서 컨테이너 IP로의 접근이 불가능하다.)

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


-p 옵션으로 컨테이너 생성하기

// -p [호스트의 포트]:[컨테이너의 포트]
docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
  • -p 옵션은 컨테이너의 포트를 호스트의 포트와 바인딩해 연결할 수 있게 설정한다.

  • 호스트의 특정 IP를 사용하려면 [호스트 IP]:7777:80과 같이 바인딩할 IP와 포트를 명시한다.

  • 여러 개의 포트를 외부에 개방하려면 -p 옵션을 여러 번 써서 설정한다.

어느 포트와 연결됐는지 확인하기

위와 같이 -p 옵션을 이용하면, 컨테이너를 생성하는 시점에서 호스트의 어느 포트와 연결됐는지 알 수 없다.

👇🏻 궁금하면

// 방법 1 : 명령어를 입력해 PORTS 항목을 확인한다.
docker ps

// 방법 2 : 컨테이너가 사용중인 호스트의 포트가 출력된다.
docker port 컨테이너명
  • 위에서 생성한 컨테이너에서 apache 웹 서버를 설치/실행 후[내 IP 주소]:80으로 접속하면 아파치 웹 서버에 접속할 수 있다.
  • 여기서, 실제로 아파치 서버가 설치된 것은 컨테이너 내부이므로 호스트에는 어떠한 영향도 주지 않는다.
  • 호스트 IP의 80번 포트로 접근 -> 80번 포트는 컨테이너의 80번 포트로 포워딩 -> 웹 서버 접근

profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글