5. Dockerfile (CMD vs ENTRYPOINT)

박은서's avatar
May 01, 2026
5. Dockerfile (CMD vs ENTRYPOINT)

📄 CMD vs ENTRYPOINT 정리 노트

1️⃣ 한 줄 핵심 차이

👉 CMD = 기본값 (바꿀 수 있음)
👉 ENTRYPOINT = 강제 실행 (잘 안 바뀜)

2️⃣ 개념 비교

구분
CMD
ENTRYPOINT
역할
기본 실행 명령
항상 실행되는 고정 명령
변경 가능 여부
쉽게 덮어쓰기 가능
덮어쓰기 어려움
사용 목적
기본값 제공
프로그램 고정 실행
우선순위
낮음
높음

3️⃣ 동작 방식 이해 (핵심 ⭐)

📌 CMD만 있을 때

CMD ["python", "app.py"]
👉 실행:
docker run my-image
python app.py 실행됨
👉 덮어쓰기 가능:
docker run my-image ls
ls 실행됨 (CMD 무시됨)

📌 ENTRYPOINT만 있을 때

ENTRYPOINT ["python", "app.py"]
👉 실행:
docker run my-image
→ 무조건 python app.py
👉 덮어쓰기 시도:
docker run my-image ls
→ 실제 실행:
python app.py ls
💡 즉, 명령이 추가됨 (완전히 바뀌지 않음)

4️⃣ CMD + ENTRYPOINT 같이 쓰는 경우 (중요 ⭐⭐⭐)

👉 가장 실무적인 패턴
ENTRYPOINT ["python", "app.py"] CMD ["--help"]
👉 실행:
docker run my-image
→ 실행:
python app.py --help
👉 값 변경:
docker run my-image --version
→ 실행:
python app.py --version
💡 구조:
ENTRYPOINT = 고정 실행
CMD = 기본 옵션

5️⃣ 비유로 이해하기

개념
비유
ENTRYPOINT
자동 실행되는 프로그램
CMD
기본 옵션 (설정값)
💡 예:
  • ENTRYPOINT = “게임 실행”
  • CMD = “난이도: 쉬움”

6️⃣ 언제 무엇을 쓰나?

✅ CMD 쓰는 경우

  • 기본 실행만 정해두고 싶을 때
  • 사용자가 자유롭게 명령 바꿀 수 있게 할 때
👉 예: 테스트용 컨테이너

✅ ENTRYPOINT 쓰는 경우

  • 특정 프로그램을 반드시 실행해야 할 때
  • 컨테이너를 “하나의 앱처럼” 만들 때
👉 예: 웹 서버, CLI 도구

✅ 같이 쓰는 경우 (추천 ⭐)

  • 실행은 고정
  • 옵션만 변경 가능
👉 가장 많이 쓰는 패턴

7️⃣ 실행 구조 요약

ENTRYPOINT + CMD = 최종 실행 명령

8️⃣ 실수 포인트 (중요 ⚠️)

❌ CMD만 쓰고 덮어쓰기 문제 발생

→ 예상치 못한 명령 실행됨

❌ ENTRYPOINT만 써서 유연성 부족

→ 디버깅 어려움

9️⃣ 초간단 기억법

  • CMD = 기본값
  • ENTRYPOINT = 고정값
  • 같이 쓰면 = “고정 + 옵션”

🔟 한 줄 정리

👉 ENTRYPOINT는 실행 자체를 고정하고, CMD는 그 실행의 기본 옵션을 제공한다
Share article