📄 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