CMD vs ENTRYPOINT 차이| 구분 | CMD | ENTRYPOINT |
|---|---|---|
| 역할 | 기본 실행 명령을 설정 | 필수 실행 명령을 설정 |
| 덮어쓰기 가능 여부 | docker run 시 다른 명령어로 변경 가능 | docker run의 인자가 ENTRYPOINT에 전달됨 |
| 실행 형식 | 쉘 (CMD command arg) 또는 exec (CMD ["command", "arg"]) | exec (ENTRYPOINT ["command", "arg"]) |
| 일반적인 사용 예 | 기본 실행 명령을 설정하지만 변경 가능할 때 | 컨테이너가 반드시 실행해야 할 명령이 있을 때 |
CMD 예제 (기본 실행 명령)CMD는 실행 명령을 제공하지만, 사용자가 변경 가능함.FROM ubuntu
CMD ["echo", "Hello, Docker!"]
echo Hello, Docker!를 실행하지만,docker run에서 명령을 바꾸면 덮어쓰기됨:docker run my-image echo "Hello, World!""Hello, World!"가 출력됨 (기존 CMD 명령 무시)ENTRYPOINT 예제 (필수 실행 명령)ENTRYPOINT는 반드시 실행되며, docker run의 인자는 ENTRYPOINT에 전달됨.FROM ubuntu
ENTRYPOINT ["echo", "Hello"]
Hello는 항상 실행됨:docker run my-image "Docker!""Hello Docker!"가 출력됨 (ENTRYPOINT가 고정된 명령이므로 인자가 뒤에 붙음)CMD와 ENTRYPOINT 함께 사용 ENTRYPOINT를 고정하고, CMD로 기본 인자를 제공 가능
FROM ubuntu
ENTRYPOINT ["echo"]
CMD ["Hello, Docker!"]
docker run my-image 실행 시:Hello, Docker!docker run my-image "Custom Message" 실행 시:Custom MessageCMD 값이 "Custom Message"로 대체됨.CMD와 ENTRYPOINT의 실행 방식 차이기본적으로 CMD는 docker run으로 덮어쓰기 가능하지만, ENTRYPOINT는 강제 실행됨
docker run --entrypoint 옵션을 사용하면 ENTRYPOINT도 변경 가능
docker run --entrypoint /bin/sh my-image
/bin/sh로 컨테이너 실행됨 (ENTRYPOINT 무시)
| 상황 | 추천 |
|---|---|
| 컨테이너 실행 명령을 기본값으로 제공하지만, 변경 가능하게 하고 싶음 | CMD |
| 컨테이너 실행 시 특정 명령을 항상 실행해야 함 | ENTRYPOINT |
| 필수 명령어를 실행하면서 기본 옵션을 제공하고 싶음 | ENTRYPOINT + CMD |
CMD = 기본 실행 명령, docker run에서 쉽게 변경 가능. ENTRYPOINT = 필수 실행 명령, docker run의 인자가 ENTRYPOINT에 전달됨.