Docker
기술을 사용해서 container 를 띄울 경우 container
와 소통할 port
를 지정해주는 것은 필수적인 일이다. 이때 port
지정과 관련되어 사용 할 수 있는 옵션에는 두가지가 있는데, 바로 PORT
와 EXPOSE
옵션이다.
오늘은 이 둘에 대해서 정리해보려 한다.
우리가 docker run 을 할때 -p
옵션을 통해서 PORT binding
을 해줄 수 있다.
docker run -p 3000:3000 node
하지만, 우리가 Dockerfile 을 작성할 때 EXPOSE
옵션을 사용하여 컨테이너가 노출할 포트를 지정 할 수도 있다.
FROM ubuntu
...
EXPOSE 3000
위 둘에는 어떤 차이가 있을까?
PORT
의 경우를 먼저 보자.
-p
를 사용한 docker run -p 3000:3000
은 말 그대로 3000 => 3000 을 binding 한다.
EXPOSE
의 경우에는 어떨까?
Dockerfile 에 EXPOSE
로 port 를 지정했다고 바로 해당 port 를 사용 할 수 있는 것은 아니다.
위와 마찬가지로 docker run -p
옵션을 통해서 port 를 지정해주어야 해당 port 를 사용 할 수 있다.
다만 다른점은, docker run -d -P
와 같이 -P
옵션을 주면 <random port>:<EXPOSE port>
로 바인딩 된다.
자, 그래서 요약을 해보자면 다음 정도가 될 것 같다.
port
와 binding 시키려면 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