포스트

[Docker] 도커< 3 : 포트포워딩>

이전글
[Docker] 도커<1>
[Docker] 도커<2>


도커 Image를 통해 컨테이너를 만들었다면 해당 컨테이너를 외부에 노출시켜야 외부에서 사용이 가능해진다.

1. 호스트머신의 포트와 컨테이너의 포트를 바인딩하기(포트포워딩)

  • 호스트 머신의 포트: 외부에서 호스트 머신에 접근할 때 사용되는 포트
  • 컨테이너의 포트: 컨테이너 내부에서 애플리케이션이 리스닝 하는 포트

즉 호스트 포트와 컨테이너 포트를 바인딩하는 것은 외부에서 애플리케이션에 접근할 수 있도록 해주는 것이다.

그림에서는 클라이언트와 호스트가 8000번 포트를 통해 통신하고

호스트포트 (8000번)이 컨테이너의 포트(80번)과 포트포워딩 되어 있다.

2. 포트포워딩 방법

2.1 명령어로 포트포워딩

도커에서 이미지를 실행할 때 이하의 명령어를 사용하면 호스트 포트와 컨테이너 포트를 연결할 수 있다.

1
docker run -d -p 호스트포트:컨테이너포트 이미지이름

이때 -p는 publish이다.

2.2 도커 이미지에서 포트포워딩

도커파일의 expose 구문을 사용하면 외부로 노출할 컨테이너의 포트를 지정해 줄 수 있다.

1
EXPOSE 80

주의할 점은 단순히 이 구문으로만 노출될 컨테이너 포트를 지정해주고, 도커이미지 실행 시, 포워딩할 호스트 포트를 지정해주지 않으면 랜덤으로 배정된다.

  1. 지정해주지 않는 경우

    1
    2
    
     docker run -d -P 이미지이름
     # 이때 반드시 -P를 써야한다. -p를 쓰면 매개변수를 요구하기 때문
    

    결과

    랜덤포트 55000과 포워딩됐다.

  2. 지정해 주는 경우

    1
    
     docker run -d -p 8000:80 이미지이름
    

    결과

    지정해준 포트와 제대로 포워딩 된 것을 볼 수 있다.

2.3 도커 컴포즈 파일에서 포트포워딩

만약 여러 이미지를 한번에 컨테이너화 하기 위해 도커 컴포즈를 사용한다면, 이곳에서도 포트포워딩을 할 수 있다.

1
2
3
4
5
6
7
version: '3'
services:
  web:
    build: .
    ports:
      - "8000:80"
  ... 이하생략


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.