본문 바로가기
Cloud/Docker

컨테이너 포트 포워딩

by 민휘 2023. 4. 22.

도커 컨테이너가 실행되는 호스트 시스템에는 NAT 환경이 적용된다. 내부 망에서 도커 컨테이너는 사설 IP를 할당받는다. 외부에서 들어오는 요청을 사설 IP 주소를 가진 컨테이너에서 처리하려면 호스트의 IP와 포트에 컨테이너의 IP와 포트를 바인딩해야한다. 이를 포트 포워딩이라고 한다.

 

웹서버 컨테이너의 실행을 예로 들어보자. 웹서버는 80 포트를 기본으로 사용한다. 컨테이너를 생성하면 이 컨테이너는 172번대의 사설 IP를 받는다. 이 컨테이너에 웹서버를 설치해 실행하면 웹서버가 80번 포트에서 동작할 것이다. 이제 외부에서 이 웹서버에 요청을 보내고자 한다. 사설 IP를 가진 프로세스에 요청을 보낼 수 없으므로 해당 컨테이너가 동작하는 호스트에 요청을 보낸다. 호스트는 특정 포트로 들어온 외부의 요청을 어느 프로세스가 처리할지 알고 있어야하는데, 이 작업이 포트 포워딩이다. 예를 들어 호스트의 80 포트로 들어오는 요청은 이 컨테이너의 80 포트에서 처리하겠다고 설정한다.

 

정리하자면 컨테이너라는 프로세스를 띄울 때 어느 포트를 사용할건지 지정하는 것.

 

아래 코드는 우분투 컨테이너를 생성해 실행하고 웹서버를 설치해 외부 클라이언트에게 아파치 웹서버를 띄워준다. 호스트의 포트 번호를 :의 왼쪽에, 컨테이너의 포트 번호를 오른쪽에 적는다. 이 컨테이너에 아파치 웹 서버를 설치해 외부에 노출할 수 있다. 이제 클라이언트가 호스트 ip 주소 80번 포트로 접근하면 컨테이너의 80번 포트로 포워딩되어 웹 서버에 접근할 수 있다.

docker create -it --name mywebserver
	-p 80:80 ubuntu:14.04

# apt-get update
# apt-get install apache2 -y
# service apache2 start

호스트의 특정 ip도 함께 바인딩한다면 ip:호스트포트:컨테이너포트 로 사용한다.

docker create -it --name mywebserver
	-p 3306:3306
	-p 192.168.0.100:7777:80
	ubuntu:14.04