728x90

 

 

EXPOSE 명령어란 ❓

EXPOSE 8080

 

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

 

EXPOSE 명령어의 구문

EXPOSE <포트번호>[/프로토콜]

 

    • 포트번호
      • 컨테이너가 내부적으로 사용할 포트 번호.
    • 프로토콜
      • tcp(기본값) 또는 udp를 지정. 생략 시 기본값은 tcp.

 

EXPOSE 명령어의 기능

1. 포트 명시

  • Docker 이미지가 실행될 때 내부적으로 사용하는 포트를 선언합니다.
  • 예: EXPOSE 8080 → 컨테이너가 내부적으로 8080 포트를 사용.

2. 정보 제공

  • EXPOSE는 컨테이너가 외부로 노출할 포트임을 명시하지만, 포트를 개방하거나 바인딩하지는 않습니다.
  • 컨테이너를 실행할 때 docker run 명령에서 -p 옵션으로 실제 호스트 포트와 컨테이너 포트를 매핑해야 합니다.

실제 적용 예시: Node.js 웹 서버 포트 설정하기

 

위와 같이 dockerfile을 지정하고 실행하려고 하면 외부에서 접근이 안 됩니다.

app.listen(80);

 

왜냐하면 위와 같이 노드 웹 서버는 포트 80번에서 수신 대기를 하고 있지만, 도커 컨테이너는 격리되어 있기 때문에 컨테이너 내부의 노드 애플리케이션의 80번 포트가 호스트 시스템에 자동으로 노출되지 않습니다. 

 

따라서 컨테이너 내부에서만 수신을 대기중이기 떄문에 80번 포트에서 수신을 할 수 없습니다.

 

이러한 경우 두 가지 설정이 필요합니다.

 

1. Dockerfile에 EXPOSE 명령어를 추가하여 문서화

EXPOSE 80

2. 컨테이너 실행 시 -p 옵션으로 실제 포트 바인딩

docker run -p 80:80 이미지이름

 

EXPOSE 명령어는 단순히 문서화 용도이며, 실제 포트 바인딩docker run 명령어의 -p 옵션을 통해 이루어져야 합니다. EXPOSE 명령어으로는 호스트 시스템에서 컨테이너의 포트에 접근할 수 없습니다.

 

 


Docker에서 EXPOSE 명령어-p 옵션서로 다른 역할을 하지만 둘 다 중요한 의미를 가집니다. EXPOSE는 컨테이너가 사용할 포트를 문서화하여 다른 개발자들과의 협업을 돕고, -p 옵션실제로 컨테이너의 포트를 호스트 시스템에 연결하여 외부 접근을 가능하게 합니다.