본문 바로가기

가상 머신/Docker

[ Docker ] 도커 시작시 Port 포워딩 설정하기

반응형

RHEL에서 특정 포트를 Docker 컨테이너의 특정 포트로 포워딩하는 방법은 Docker의 -p 옵션을 사용하여 호스트의 포트를 컨테이너의 포트에 연결하는 방식입니다. 이 과정은 Docker를 실행할 때 지정할 수 있습니다.

 

1. Docker 실행 시 포트 포워딩 설정

Docker에서 특정 포트를 컨테이너의 포트로 포워딩하려면, docker run 명령어에 -p 옵션을 사용합니다. -p 옵션의 형식은 <호스트 포트>:<컨테이너 포트>입니다.

예를 들어, 호스트의 8080 포트를 Docker 컨테이너의 80 포트로 포워딩하려면 다음과 같이 실행합니다.

sudo docker run -d -p 8080:80 <이미지 이름>

이 명령어는 호스트의 8080 포트로 들어오는 트래픽을 컨테이너의 80 포트로 전달합니다.

 

2. docker-compose를 사용하여 포트 포워딩 설정

docker-compose를 사용하는 경우, docker-compose.yml 파일 내에 ports 항목을 설정하여 포트 포워딩을 할 수 있습니다. 예를 들어:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"

docker-compose.yml 파일은 호스트의 8080 포트를 컨테이너의 80 포트로 포워딩합니다.

docker-compose를 통해 서비스를 실행하려면:

sudo docker-compose up -d

 

3. RHEL에서 특정 포트를 Docker 컨테이너의 특정 포트로 포워딩하기

Docker 컨테이너가 이미 실행 중인 상태에서 호스트의 포트를 추가적으로 포워딩하려면, Docker의 docker network를 사용하거나 firewalld/iptables를 설정해야 할 수도 있습니다. 하지만 기본적으로 docker run 명령어 또는 docker-compose 파일에서 포트 포워딩을 설정하는 것이 가장 간단하고 일반적인 방법입니다.

 

4. 특정 포트 포워딩을 위한 추가적인 설정 (예: firewalld 사용)

Docker 컨테이너가 사용하는 포트를 RHEL 방화벽에서 포워딩하려면, firewalld를 이용해 추가적인 포트 포워딩을 설정할 수 있습니다. 예를 들어:

  1. 호스트의 8080 포트로 들어오는 트래픽을 Docker 컨테이너의 80 포트로 전달하려면:
   sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent
   sudo firewall-cmd --reload
  1. 설정이 완료되면 firewalld가 포트 포워딩을 처리합니다. docker run 명령어에서 호스트의 8080 포트를 컨테이너의 80 포트로 연결해두었기 때문에, 호스트의 8080 포트로 들어오는 요청은 Docker 컨테이너의 80 포트로 자동으로 전달됩니다.

 

5. Docker 네트워크에서 포트 포워딩

Docker는 기본적으로 호스트와 컨테이너 간의 네트워크를 다르게 설정합니다. docker run-p 옵션을 사용하지 않고, Docker 네트워크 설정을 통해 포트 포워딩을 설정할 수도 있습니다.

sudo docker network create my_custom_network
sudo docker run --network my_custom_network -d -p 8080:80 <이미지 이름>

이 방법은 여러 컨테이너가 동일한 네트워크에서 서로 통신하도록 할 수 있으며, 복잡한 환경에서 유용합니다.

결론

Docker에서 포트 포워딩을 설정하는 기본적인 방법은 docker run 명령어의 -p 옵션을 사용하거나, docker-compose.yml 파일에서 ports 항목을 지정하는 것입니다. RHEL에서 추가적으로 firewalldiptables를 사용하여 네트워크 포워딩을 설정할 수도 있습니다.

반응형