RUN, CMD, ENTRYPOINT, EXPOSE
RUN: 이미지 빌드 시 명령 실행
Dockerfile
실행 흐름
docker build -t test-run -f Dockerfile-RUN .
docker run test-run
결과
- RUN 명령은 이미지 빌드 도중 실행되고 그 결과가 이미지 안에 저장됩니다.
- cat /msg.txt를 실행하니, 아까 RUN 명령으로 생성한 파일이 그대로 존재.
CMD: 컨테이너 실행 시 기본 명령
Dockerfile
실행 흐름
docker build -t test-cmd -f Dockerfile-CMD .
docker run test-cmd
결과
- CMD는 컨테이너 실행 시 기본 명령으로 동작합니다.
- docker run 뒤에 아무 인자 안 주면 CMD가 실행됩니다.
- 하지만 docker run test-cmd echo Bye처럼 인자를 주면 CMD는 덮어쓰기됩니다.
ENTRYPOINT: 고정 실행 명령 + 인자 덧붙이기
Dockerfile
실행 흐름
docker build -t test-entry -f Dockerfile-ENTRYPOINT .
docker run test-entry World
결과
- ENTRYPOINT는 고정 명령으로, docker run에 전달한 인자가 덧붙여져서 실행됩니다.
- 즉, ["echo", "ENTRYPOINT:"] + World → 실제 실행: echo ENTRYPOINT: World
구분 실행 시점 덮어쓰기 여부 인자 추가 방식 예시 결과
RUN | 빌드 시 실행 | 해당 없음 | 해당 없음 | 이미지 안에 파일 생성됨 |
CMD | 컨테이너 실행 시 | O (덮어씀) | 무시됨 | docker run 인자로 덮어짐 |
ENTRYPOINT | 컨테이너 실행 시 | X (고정 명령) | 인자 덧붙임 | ENTRYPOINT + 인자 실행됨 |
EXPOSE - 컨테이너 포트 명시
main.py
Dockerfile
실행 흐름
docker build -t test-expose -f Dockerfile-EXPOSE .
docker run -d -p 9999:8000 test-expose
- 9999 → 로컬에서 접속할 포트 (원하는 포트 사용 가능)
- 8000 → 컨테이너에서 실제 애플리케이션이 실행되는 포트
- EXPOSE 8000은 이 컨테이너가 8000 포트를 사용한다는 선언
결과
- FastAPI 애플리케이션 정상 출력
- 내부적으로는 컨테이너 8000번 포트 → 외부 9999번 포트에 연결
- Dockerfile에서 EXPOSE는 컨테이너 내부 애플리케이션이 사용하는 포트 번호를 명시합니다.
- 실제 외부에서 접근하려면 -p 옵션으로 호스트 포트와 컨테이너 포트를 연결해야 합니다.
'Docker' 카테고리의 다른 글
Docker - 네트워크와 Compose로 컨테이너 연결하기 (0) | 2025.06.18 |
---|---|
Docker - 데이터 관리(Volume, Bind Mount) (1) | 2025.06.18 |
Docker - 애플리케이션과 Apache 서버 이미지 만들기 (0) | 2025.06.17 |
Docker -i, -t, -d 옵션 (2) | 2025.06.16 |
Docker - Dockerfile을 이용한 도커이미지 빌드 (0) | 2025.06.16 |
Docker - 설치 & 컨테이너 실행 (0) | 2025.06.16 |