Docker이미지와 빌드

ENTRYPOINT와 CMD 차이

컨테이너 시작 명령을 구성할 때 `ENTRYPOINT`와 `CMD`가 각각 어떤 역할을 맡는지 정리합니다.

마지막 수정 2026년 3월 21일

기본 패턴

dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY . .

ENTRYPOINT ["python", "-m", "http.server"]
CMD ["8000"]

설명

  • ENTRYPOINT는 이 컨테이너가 "기본적으로 어떤 프로그램"으로 동작하는지 정하는 쪽에 가깝습니다.
  • CMD는 그 프로그램에 넘길 기본 인자나, ENTRYPOINT가 없을 때의 기본 실행 명령을 정하는 역할을 합니다.
  • 둘을 함께 쓰면 "실행 파일은 고정하고, 기본 옵션만 바꾸기 쉽게" 설계할 수 있습니다.
  • 예를 들어 ENTRYPOINT ["python", "-m", "http.server"]CMD ["8000"] 조합은 기본 포트만 상황에 따라 덮어쓰기 좋은 패턴입니다.
  • 반대로 디버깅용으로 docker run image sh처럼 완전히 다른 명령을 넣고 싶다면 ENTRYPOINT가 오히려 방해가 될 수도 있습니다.

짧은 예제

bash
docker run my-http
docker run my-http 9000
docker run --entrypoint sh my-http

빠른 정리

항목역할
ENTRYPOINT컨테이너의 기본 실행 프로그램
CMD기본 인자 또는 기본 명령
인자 덮어쓰기docker run image ...
프로그램 덮어쓰기--entrypoint

주의할 점

컨테이너를 "하나의 명령 실행기"로 볼지, "기본 프로그램이 있는 제품"으로 볼지에 따라 ENTRYPOINT 사용감이 달라집니다. 재사용성과 디버깅 편의 사이 균형을 먼저 정하고 선택하는 편이 좋습니다.

참고 링크

2 sources