본문 바로가기
AI Journey/클라우드

[Docker] 포트 포워딩(port forwarding) (feat. Nginx)

by 보눔비스타 2025. 12. 30.

경량 웹 서버인 Nginx를 컨테이너로 구동하고, 외부(Host)에서 접근할 수 있도록 네트워크 포트를 매핑해보자.

1. 포트 매핑 (Port Mapping)

컨테이너는 격리된 네트워크 환경을 가지므로, 외부에서 접속하려면 호스트의 포트와 컨테이너의 포트를 연결해야 한다.

  • Command: -p [Host_Port]:[Container_Port]
  • 설명: 호스트의 8000번 포트로 들어오는 트래픽을 컨테이너의 80번 포트(Nginx 기본 포트)로 전달한다.
docker run -p 8000:80 -d nginx:latest

이 때 docker ps를 실행해서 보이는 0.0.0.0:8000->80/tcp는 IPv4의 모든 인터페이스에서의 접근을 허용함을 의미한다.

 

포트 포워딩 트래픽 흐름

Docker 컨테이너는 기본적으로 외부와 차단된 격리 환경에 있다. 외부 브라우저가 컨테이너 내부의 Nginx에 접속하기 위해서는 호스트의 포트와 컨테이너의 포트를 연결해주는 작업이 필요하다.

2. 다중 포트 포워딩 (Multi-port Forwarding)

일반적으로 웹 서버 컨테이너는 하나의 호스트 포트와 매핑하여 사용하지만, 테스트 목적이나 로드 밸런싱(Load Balancing) 환경을 모사하기 위해 하나의 컨테이너에 여러 개의 호스트 포트를 연결해야 할 때가 있다.

이 때 하나의 이미지로 여러 개의 컨테이너를 띄우고, 각각 다른 호스트 포트를 할당하여 서비스할 수도 있다.

컨테이너 실행 및 포트 매핑

Nginx 컨테이너(web_triple)를 생성하며 호스트의 2000, 2001, 2002번 포트를 모두 컨테이너의 80번 포트로 연결한다.

docker run --name web_triple -p 2000:80 -p 2001:80 -p 2002:80 -d nginx

동작 원리 (라운드 로빈 방식)

이 설정이 완료되면 브라우저에서 localhost:2000, localhost:2001, localhost:2002 중 어느 곳으로 접속하더라도 동일한 Nginx 시작 페이지가 뜬다.

 

또한 Host OS(Windows 등)의 브라우저에서도 http://[Ubuntu_IP]:2000, 2001, 2002로 각각 접속하여 페이지가 정상적으로 로딩되는지 확인할 수 있다.

 

이 구조는 라운드 로빈(Round Robin) 방식의 로드 밸런싱을 이해하기 위한 기초 단계로 볼 수 있다.

실제 운영 환경에서는 앞단에 로드 밸런서가 존재하고 트래픽을 분산시키지만, 컨테이너 관점에서는 여러 진입점을 통해 요청을 받아들일 수 있는 구조가 형성됨을 의미한다.