본문 바로가기
Docker

Docker의 CMD와 ENTRYPOINT

by xogns93 2024. 12. 6.

Docker의 CMDENTRYPOINTDockerfile에서 컨테이너가 실행될 때 실행할 기본 명령을 지정하는 데 사용됩니다. 두 개념은 비슷해 보이지만 동작 방식과 사용 목적에서 차이점이 있습니다.


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. 요약

  1. CMD

    • 기본 명령 설정.
    • 컨테이너 실행 시 덮어쓰기가 가능.
  2. ENTRYPOINT

    • 컨테이너 실행 시 반드시 실행할 명령 설정.
    • 고정 명령으로 사용하고, 추가 인수를 받을 수 있음.
  3. 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