728x90

개요

 

[Docker] EXPOSE 명령어와 docker run -p 옵션의 차이점 알아보기

EXPOSE 명령어란 ❓EXPOSE 8080 EXPOSE 명령어는 Dockerfile에서 컨테이너가 실행 중에 사용할 네트워크 포트를 지정하는 명령어입니다. 하지만 중요한 것은 이 명령어가 실제로 포트를 열어주지는 않는

pixx.tistory.com

 

이전 포스팅에서는 Docker의 EXPOSE 명령어와 run -p 명령어의 차이점 및 주의사항에 대해 알아보았습니다.

 

이번에는 실제로 EXPOSE 명령어만으로는 포트 연결이 되지 않는지, 반드시 run -p 명령어와 함께 사용해야 하는지 확인해보겠습니다.

 

개요

먼저 테스트를 위한 간단한 Dockerfile을 만들어 보겠습니다.

FROM node

WORKDIR /app

COPY . /app

RUN npm install

EXPOSE 80

CMD [ "node","server.js" ]

 

  • 위 Dockerfile을 기반으로 먼저 이미지를 생성합니다.

 

  • 생성된 이미지를 기반으로 컨테이너를 실행하여 서버를 실행해보겠습니다.

 

컨테이너가 정상적으로 실행되고 있지만 실행 안되는 것을 확인할 수 있습니다. 이는 포트 매핑 설정이 누락되었기 때문입니다.

 

Dockerfile의 EXPOSE 80 명령어는 단순히 문서화 목적일 뿐, 실제 포트 연결에는 영향을 주지 않습니다.

docker run -p 3000:80 87b5d593d1c8

 

따라서 컨테이너를 실행할 때는 -p 플래그를 사용하여 로컬 포트컨테이너 내부 포트연결해야 합니다.

 

위 명령어에서 콜론(:) 왼쪽의 3000은 호스트의 포트 번호이고, 오른쪽의 80은 컨테이너 내부의 포트 번호입니다.

 

 

포트 매핑을 하고 난 뒤 localhost에 들어가보면 정상적으로 나오는 것을 확인할 수 있습니다.

 

이처럼 EXPOSE는 컨테이너가 사용할 포트를 문서화하여 다른 개발자들과의 협업을 돕고, -p 옵션 실제로 컨테이너의 포트를 호스트 시스템에 연결하여 외부 접근을 가능하게 합니다.