일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Linux
- kotlin
- 코틀린 코루틴의 정석
- kotlin spring
- 오블완
- MySQL
- 티스토리챌린지
- Pinpoint
- Java
- Elasticsearch
- Kubernetes
- Spring
- AI
- 정보처리기사실기 기출문제
- AWS EKS
- CKA 기출문제
- minikube
- 정보처리기사 실기
- kotlin coroutine
- kotlin querydsl
- PETERICA
- IntelliJ
- 정보처리기사 실기 기출문제
- 기록으로 실력을 쌓자
- 공부
- APM
- mysql 튜닝
- CloudWatch
- CKA
- aws
- Today
- Total
피터의 개발이야기
[Docker] 도커파일의 EXPOSE와 "docker run -p" 명령의 차이점 본문
ㅁ 들어가며
Docker를 설정하면서 포트 설정과 관련하여 Dockerfile의 EXPOSE 명령어와 "docker run -p" 옵션을 보게 된다. 이 두 가지는 비슷해 보이지만 실제로는 매우 다른 목적을 가지고 있다.
EXPOSE: 문서화 및 메타데이터 제공되며, 이미지 빌드 시 적용됨.
"docker run -p": 컨테이너 실행 시 실제 포트 매핑 수행
ㅁ Dockerfile의 EXPOSE
EXPOSE 명령어는 Dockerfile에서 사용되며, 컨테이너가 실행 중에 사용할 네트워크 포트를 지정하는 역할을 한다. 하지만 EXPOSE가 실제로 포트를 열어주지는 않는다.
FROM nginx
EXPOSE 80
ㅇ 문서역할: 이미지를 빌드할 때에 사용가능한 포트를 안내하는 커뮤니케이션 도구
ㅇ 실제 포트 개방 없음: EXPOSE만으로는 호스트와 컨테이너 간 포트 연결이 이루어지지 않는다.
ㅇ 랜덤포트: "docker run -P" 옵션을 사용하면 EXPOSE로 지정된 포트가 랜덤으로 연결된다.
ㅁ "docker run -p" 옵션
docker run -p 8080:80 my-nginx-image
ㅇ 실제 포트 매핑: "docker run -p" 옵션은 실제로 호스트와 컨테이너 간의 포트 매핑을 수행한다.
ㅇ 유연한 포트 지정: 호스트와 컨테이너의 포트 번호를 다르게 지정할 수 있다.
ㅇ 런타임 설정: 컨테이너 실행 시점에 포트 설정을 변경할 수 있다.
ㅁ "docker run -P" 옵션 테스트
$ docker run --help 중
-P, --publish-all Publish all exposed ports to random ports
ㅇ 설명에 -P 옵션은 모든 노출된 포트를 임의의 포트에 게시한다.
-P 옵션을 사실 사용해 본 적이 없어서 테스트 해 보았다.
FROM nginx
EXPOSE 7070 9090
ㅇ Dockerfile 생성
# 빌드
$ docker build -t expose-test .
# 실행
$ docker run -P -itd --name test expose-test:latest
# 확인
$ docker ps
CONTAINER ID IMAGE ~~ PORTS NAMES
b69abbbdf102 expose-test:latest ~~ 0.0.0.0:55003->80/tcp, 0.0.0.0:55004->7070/tcp, 0.0.0.0:55005->9090/tcp test
- 0.0.0.0:55003->80/tcp
- 0.0.0.0:55004->7070/tcp
- 0.0.0.0:55005->9090/tcp
모든 expose port에 임의 포트가 지정되어 있다.
ㅁ 마무리
EXPOSE와 "docker run -p"는 서로 다른 목적과 사용 시점을 가지고 있다. EXPOSE는 이미지 설계 단계에서 의도된 포트를 명시하는 용도로, "docker run -p"는 실제 컨테이너 실행 시 포트 매핑을 수행하는 용도로 사용한다. 두 기능을 적절히 조합하여 사용하면 동적으로 포트를 이용하여 Docker 컨테이너의 네트워크 설정을 할 수 있다.
ㅁ 함께 보면 좋은 사이트
'DevOps > Docker' 카테고리의 다른 글
[Docker] Ubuntu:22.04에 ffmpeg 설치 방법 (0) | 2025.01.08 |
---|---|
[Docker] linux/ffmpeg을 이용한 무배포, ffmpeg 테스트 방법 (0) | 2025.01.08 |
[Docker] Docker Run 명령어 정리 (1) | 2025.01.07 |
[Docker] MacOS에서 Docker 로그 파일 위치 찾기 (0) | 2025.01.07 |
Trivy: 컨테이너 이미지 취약점 스캐너 사용법 (1) | 2025.01.04 |