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 옵션은 실제로 컨테이너의 포트를 호스트 시스템에 연결하여 외부 접근을 가능하게 합니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker 컨테이너의 실행 모드: Attach vs Detach (0) | 2024.12.26 |
---|---|
[Dokcer] 도커 레이어 시스템 이해하기: 이미지와 컨테이너의 구성 원리 (0) | 2024.12.17 |
[Docker] Docker Compose로 멀티 컨테이너 애플리케이션 쉽게 관리하기 (1) | 2024.08.12 |
[Docker] Docker 주요 명령어 알아보기 🐳 (0) | 2024.08.12 |
[Docker] Docker와 가상 머신(Virtual Machine, VM)의 차이 (0) | 2024.08.12 |