Docker의 CMD
와 ENTRYPOINT
는 Dockerfile에서 컨테이너가 실행될 때 실행할 기본 명령을 지정하는 데 사용됩니다. 두 개념은 비슷해 보이지만 동작 방식과 사용 목적에서 차이점이 있습니다.
1. CMD
기능
- 컨테이너가 실행될 때 기본으로 실행할 명령을 지정합니다.
- 사용자가 컨테이너 실행 시 명령을 덮어쓸 수 있습니다.
- Dockerfile에서 한 번만 사용할 수 있으며, 여러 번 사용하면 마지막 CMD가 적용됩니다.
문법
CMD ["실행 파일", "인수1", "인수2"]
또는
CMD ["인수1", "인수2"]
예시
Dockerfile
FROM ubuntu:latest
CMD ["echo", "Hello, Docker!"]
실행
docker build -t cmd-example .
docker run cmd-example
출력:
Hello, Docker!
덮어쓰기
docker run cmd-example echo "Overwritten Command"
출력:
Overwritten Command
2. ENTRYPOINT
기능
- 컨테이너가 실행될 때 반드시 실행해야 하는 기본 명령을 지정합니다.
- 사용자가 컨테이너 실행 시 명령을 덮어쓸 수 없고, 추가 인수를 전달할 수 있습니다.
- 보통 컨테이너의 실행을 특정 애플리케이션으로 고정하려는 경우 사용합니다.
문법
ENTRYPOINT ["실행 파일", "인수1", "인수2"]
예시
Dockerfile
FROM ubuntu:latest
ENTRYPOINT ["echo", "Default EntryPoint"]
실행
docker build -t entrypoint-example .
docker run entrypoint-example
출력:
Default EntryPoint
인수 추가
docker run entrypoint-example "Extra Argument"
출력:
Default EntryPoint Extra Argument
3. CMD와 ENTRYPOINT의 차이점
특징 | CMD | ENTRYPOINT |
---|---|---|
용도 | 기본 명령 지정, 덮어쓰기가 가능 | 컨테이너가 실행할 명령을 강제 |
덮어쓰기 가능 여부 | 사용자가 실행 시 완전히 덮어쓸 수 있음 | 덮어쓰기 불가능, 추가 인수 전달 가능 |
구문 형태 | CMD ["명령어", "인수"] |
ENTRYPOINT ["명령어", "인수"] |
결합 방식 | 실행 시 덮어쓰기 | 실행 시 인수로 결합 |
4. CMD와 ENTRYPOINT를 함께 사용하는 경우
목적
- ENTRYPOINT로 고정 명령을 설정하고, CMD로 기본 인수를 설정해 유연성을 제공합니다.
예시
Dockerfile
FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["Default CMD Argument"]
실행
docker build -t cmd-entrypoint-example .
docker run cmd-entrypoint-example
출력:
Default CMD Argument
CMD 인수 덮어쓰기
docker run cmd-entrypoint-example "Custom Argument"
출력:
Custom Argument
5. 요약
CMD
- 기본 명령 설정.
- 컨테이너 실행 시 덮어쓰기가 가능.
ENTRYPOINT
- 컨테이너 실행 시 반드시 실행할 명령 설정.
- 고정 명령으로 사용하고, 추가 인수를 받을 수 있음.
CMD와 ENTRYPOINT 조합
- ENTRYPOINT로 명령을 고정하고, CMD로 기본 인수를 설정하여 유연성 확보.
'Docker' 카테고리의 다른 글
Dockerfile 명령어 (0) | 2024.12.06 |
---|---|
유니온 파일시스템 (1) | 2024.12.06 |
파이프(pipe) ( | ) (1) | 2024.12.05 |
CFS(Completely Fair Scheduler) (0) | 2024.12.05 |
클러스터(cluster) (0) | 2024.12.05 |