Docker - RUN, CMD, ENTRYPOINT, EXPOSE 명령어 차이

2025. 6. 17. 22:22·Docker

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
'Docker' 카테고리의 다른 글
  • Docker - 네트워크와 Compose로 컨테이너 연결하기
  • Docker - 데이터 관리(Volume, Bind Mount)
  • Docker - 애플리케이션과 Apache 서버 이미지 만들기
  • Docker -i, -t, -d 옵션
jaeon.cloud
jaeon.cloud
  • jaeon.cloud
    JEONG JAE ON
    jaeon.cloud
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Docker (8)
      • Cloud (7)
      • AWS (14)
      • Network (9)
      • Linux (1)
      • Python (7)
      • Javascript (3)
      • React (5)
      • Project (3)
      • Kubernetes (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Python
    kubernetes
    react
    네트워크
    AWS
    3-tier Architecture
    클라우드
    cors
    docker
    http
    lambda
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jaeon.cloud
Docker - RUN, CMD, ENTRYPOINT, EXPOSE 명령어 차이
상단으로

티스토리툴바