7.1 포트 포워딩 기본 (Port forwarding)
포트 포워딩은 Docker의 중요한 기능으로, 컨테이너 내부 애플리케이션을 외부에서 접근 가능하게 해주는 기능이야. 이 기능은 컨테이너에서 실행 중인 웹 서버, 데이터베이스 또는 기타 서비스에 호스트 머신이나 다른 네트워크에서 접속하려 할 때 필요해.
기본적으로 컨테이너는 격리된 네트워크에서 작동해. 컨테이너 내의 서비스를 접근 가능하게 만들려면 Docker가 컨테이너의 포트를 호스트 머신의 포트로 포워딩해.
포트 포워딩을 위해 -p
또는 --publish
옵션을 docker run
명령어와 함께 사용해.
문법
docker run -p [HOST_PORT]:[CONTAINER_PORT] [OPTIONS] IMAGE [COMMAND] [ARG...]
여기서:
- HOST_PORT: 트래픽이 통과할 호스트 머신의 포트야.
- CONTAINER_PORT: 트래픽이 리디렉션될 컨테이너 내부의 포트야.
- OPTIONS: 컨테이너 설정을 위한 추가 옵션들이야.
- IMAGE: 컨테이너가 생성될 이미지야.
- COMMAND: 컨테이너 내부에서 실행될 명령어야.
- ARG...: 명령어에 대한 인자들이야.
기본 사용 예제
이 예제에서는 Nginx 웹 서버가 실행되고 있는 컨테이너의 포트 80이 호스트 머신의 포트 8080으로 포워딩돼. 그러면 http://localhost:8080 주소로 브라우저에서 웹 서버를 열 수 있어.
docker run -d -p 8080:80 nginx
7.2 포트 포워딩의 다른 옵션들
1. 다중 포트 포워딩
Docker는 여러 포트를 동시에 포워딩할 수 있어. 이를 위해 -p
옵션을 여러 번 사용할 수 있어.
예제
이 예제에서는 컨테이너의 포트 80이 호스트의 포트 8080으로, 컨테이너의 포트 443이 호스트의 포트 8443으로 포워딩돼.
docker run -d -p 8080:80 -p 8443:443 nginx
2. IP 주소를 지정한 포트 포워딩
특정 IP 주소를 지정해서 포워딩된 포트를 연결할 수 있어. 이건 호스트 머신이 여러 네트워크 인터페이스를 가지고 있을 때, 컨테이너 접근을 제한하고 싶을 때 특히 유용해.
예제:
이 예제에서는 컨테이너의 포트 80이 호스트 머신의 127.0.0.1
인터페이스에서만 포트 8080으로 포워딩돼. 이 말은 서비스에 접근하려면 반드시 해당 호스트 머신에서만 가능하다는 거야.
docker run -d -p 127.0.0.1:8080:80 nginx
3. 포트 범위 포워딩
여러 포트를 한 번에 포워딩하고 싶다면, Docker는 범위로 설정하는 것도 지원해.
예제:
이 예제에서는 컨테이너의 7000
부터 8000
까지의 포트가 호스트 머신의 7000
부터 8000
까지 포워딩돼.
docker run -d -p 7000-8000:7000-8000 someimage
7.3 실제 사용 시나리오
1. 웹 서버 접근
포트 포워딩은 보통 컨테이너 내에서 실행 중인 웹 서버에 접근하기 위해 사용돼.
docker run -d -p 8080:80 nginx
이 명령어를 실행하면, 컨테이너의 80번 포트에서 실행 중인 Nginx 웹 서버가 호스트 머신의 8080번 포트에서 접근 가능하게 돼.
2. 데이터베이스 접근
포트 포워딩은 또한 컨테이너 내에서 실행 중인 데이터베이스에 접근하는 데 유용해.
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword postgres
이 예제에서는, 컨테이너의 5432번 포트에서 실행 중인 PostgreSQL이 호스트 머신의 5432번 포트에서 접근 가능하게 돼.
3. 테스트와 개발
Docker 컨테이너는 종종 격리된 테스트 환경을 만들기 위해 사용돼. 포트 포워딩은 개발자가 실제 환경에서 실행되는 것처럼 애플리케이션을 실행하고 테스트할 수 있게 도와줘.
docker run -d -p 8080:80 -p 8443:443 myapp
이 예제에서는, 애플리케이션이 8080번 포트와 8443번 포트에서 테스트되고 있어. 이 포트는 운영 환경에서 사용되는 표준 포트와 같아.
7.4 추가 추천 사항
1. 포트 보호
포트를 포워딩할 때, 보안을 꼭 신경 써. 열린 포트는 공격 대상이 될 수 있어. 정말 필요한 포트만 포워딩하고, 방화벽을 사용해서 접근을 제한하면 좋아.
2. 방화벽과 NAT
보안을 강화하고 트래픽을 관리하려면 방화벽과 Network Address Translation (NAT)을 사용해 봐. 이렇게 하면 서비스 접근을 제한하면서 네트워크 연결을 제어할 수 있어.
3. 모니터링 및 로그
포워딩된 포트의 트래픽을 추적하려면 모니터링과 로그 수집을 설정하면 좋겠어. 이렇게 하면 의심스러운 활동을 더 빨리 발견하고 반응할 수 있어.
GO TO FULL VERSION