[Docker] PORT vs EXPOSE

Younghwan Cha·2023년 3월 31일
0

Docker

목록 보기
1/18
post-thumbnail

Docker 기술을 사용해서 container 를 띄울 경우 container 와 소통할 port 를 지정해주는 것은 필수적인 일이다. 이때 port 지정과 관련되어 사용 할 수 있는 옵션에는 두가지가 있는데, 바로 PORTEXPOSE 옵션이다.
오늘은 이 둘에 대해서 정리해보려 한다.

PORT vs EXPOSE?


우리가 docker run 을 할때 -p 옵션을 통해서 PORT binding 을 해줄 수 있다.

docker run -p 3000:3000 node

하지만, 우리가 Dockerfile 을 작성할 때 EXPOSE 옵션을 사용하여 컨테이너가 노출할 포트를 지정 할 수도 있다.

FROM ubuntu
...
EXPOSE 3000

위 둘에는 어떤 차이가 있을까?

PORT

PORT 의 경우를 먼저 보자.
-p 를 사용한 docker run -p 3000:3000 은 말 그대로 3000 => 3000 을 binding 한다.

EXPOSE

EXPOSE 의 경우에는 어떨까?
Dockerfile 에 EXPOSE 로 port 를 지정했다고 바로 해당 port 를 사용 할 수 있는 것은 아니다.
위와 마찬가지로 docker run -p 옵션을 통해서 port 를 지정해주어야 해당 port 를 사용 할 수 있다.
다만 다른점은, docker run -d -P 와 같이 -P 옵션을 주면 <random port>:<EXPOSE port> 로 바인딩 된다.

Conclusion


자, 그래서 요약을 해보자면 다음 정도가 될 것 같다.

  1. Container port 를 사용할 특정 port 와 binding 시키려면 PORT 사용
  2. Container port 를 단순히 노출만 시키려면 EXPOSE 사용

조금 더 잘 이해하기 위해서 예시를 들어보자.

1번 경우
server 의 3000 port 로 요청을 보냈을 때 container 의 3000 port 로 요청이 전달되길 원할 경우
client ---> localhost:3000 ---> container:3000

2번 경우
nginx 를 사용하여 명시적으로 요청을 container 에 전달할 경우
client ---> nginx ---> container:3000

[docker port option] https://soft.plusblog.co.kr/139

profile
개발 기록

0개의 댓글