기본 패턴
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