출처: docker run -p 옵션과 Dockerfile의 EXPOSE와의 차이 | imkh.dev
docker run -p vs EXPOSE
도커 컨테이너를 실행할 때 사용하는 명령어인 docker run 명령어의 옵션 중 컨테이너의 포트를 호스트 OS와 매핑시킬 수 있는 옵션인 -p 옵션이 있다. 해당 옵션은 콜론을 기준으로 왼쪽은 들어오는 포트, 오른쪽은 매핑시킬 포트를 입력한다. 예를 들어 -p 8080:8080으로 입력한다.
도커 파일(Dockerfile)을 작성할 때 EXPOSE라는 옵션을 지정하여 컨테이너의 포트를 개방시킬 수 있다.
EXPOSE
도커 파일에 작성된 EXPOSE 옵션은 이 이미지가 해당 포트를 외부로 개방할 것이다. 라고 명시하는 것이지 EXPOSE로 지정되어 있다고 해서 사용자가 해당 포트로 접근이 가능하거나 한 것은 아니다. 컨테이너를 실행할 때 호스트 OS로 들어오는 포트와 해당 포트를 매핑시켜야 한다.
예를 들어 도커 파일에 EXPOSE 8888로 적혀있다면 해당 이미지로 생성된 컨테이너는 외부로 8888번 포트를 개방하겠다는 뜻이다. 그리고 호스트 OS에서 해당 컨테이너를 실행시킬 때 위 포트로 매핑시키면 드디어 의미가 있어진다.
사용
docker run -p 명령어를 사용해서 매핑시키는 포트의 왼쪽은 정리했듯이 호스트 OS로 들어오는 포트고, 오른쪽은 매핑시킬 컨테이너의 포트를 작성하면 된다. 여기서 실 사용자가 8080번 포트로 접속하면 컨테이너의 개방된 8888번 포트로 매핑시키고 싶다 하면 docker run -p 8080:8888 centos로 작성하면 된다는 소리이다.
-P 과 EXPOSE
도커 파일에 아래와 같이 3개의 포트를 개방한다고 가정한다.
EXPOSE 3000
EXPOSE 4000
EXPOSE 5000
호스트 OS에서 컨테이너를 실행할 때 매번 포트 룰을 정하는 것은 귀찮은 일이다. 랜덤한 포트를 지정해서 개방된 포트를 런타임에 매핑시킬 수 있다. 이미지를 빌드하고 명령어를 실행할 때, 소문자 p 대신 대문자를 사용하면 된다.
docker run -it -d -P exposed-ports bash
37760ccc5da912d1e6baa1e002f73c6f3b5facd50e08c35446b4780751dc82e4
docker port 37760ccc5da9
3000/tcp -> 0.0.0.0:49163
3000/tcp -> :::49163
4000/tcp -> 0.0.0.0:49162
4000/tcp -> :::49162
5000/tcp -> 0.0.0.0:49164
5000/tcp -> :::49164
포트가 자동으로 매핑된 것을 확인할 수 있다.
'프로그램 활용 > 클라우드 가상화 도커' 카테고리의 다른 글
Kubernetes Pod Eviction (0) | 2023.08.09 |
---|---|
쿠버네티스 kubernetes 파드 (0) | 2023.08.09 |
클라우드/쿠버네티스 Kubernetes 쿠버네티스 volume 마운트 (0) | 2023.08.08 |
쿠버네티스 도커 단일 인스턴스 스테이트풀 애플리케이션 실행하기 (0) | 2023.08.08 |
DBeaver(디비버) Public Key Retrieval is not allowed 에러 (0) | 2023.08.07 |