[Docker] Docker ENTRYPOINT와 CMD의 차이점
ㅁ 들어가며
ㅇ Docker 컨테이너를 구성할 때 자주 사용되는 중요한 명령어인 ENTRYPOINT와 CMD는 비슷해 보이지만 중요한 차이점이 있다. 이 글에서는 ENTRYPOINT와 CMD의 차이점에 대해 정리해 보았다.
ㅁ ENTRYPOINT란?
FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello from ENTRYPOINT"]
ㅇ Dockerfile를 작성하고 빌드한다.
# 실행
$ docker run command-test:latest
Hello from ENTRYPOINT
# Param 추가
$ docker run command-test:latest addparam peterica
Hello from ENTRYPOINT addparam peterica
ㅇ ENTRYPOINT에 지정된 명령이 항상 실행되며, 추가 인자는 ENTRYPOINT 명령 뒤에 붙는다.
ㅇ ENTRYPOINT는 컨테이너가 시작될 때 실행되는 기본 명령을 지정한다.
ㅇ 이는 컨테이너가 실행될 때 항상 실행되어야 하는 명령이나 스크립트를 설정하는 데 사용된다.
ㅇ 주요 특징
ㄴ 컨테이너의 주요 실행 프로세스를 정의한다.
ㄴ Dockerfile에서 한 번만 사용할 수 있다.
ㄴ docker run 명령으로 재정의하기 어렵다.
ㅁ CMD란?
FROM ubuntu:20.04
CMD ["echo", "Hello from CMD"]
ㅇ Dockerfile 생성
# 실행
$ docker run command-test
Hello from CMD
$ docker run command-test echo "Override CMD Test"
Override CMD Test
ㅇ CMD는 컨테이너가 시작될 때 실행될 기본 명령이나 매개변수를 제공한다.
ㅇ ENTRYPOINT와 달리 docker run 명령으로 쉽게 재정의할 수 있다.
ㅇ 주요 특징
ㄴ 기본 명령이나 ENTRYPOINT에 대한 기본 매개변수를 제공한다.
ㄴ docker run 명령으로 쉽게 재정의할 수 있다.
ㅁ ENTRYPOINT와 CMD의 주요 차이점
FROM ubuntu:20.04
ENTRYPOINT ["echo", "Hello"]
CMD ["World"]
$ docker run command-test
Hello World
$ docker run command-test Peterica
Hello Peterica
ㅇ ENTRYPOINT는 항상 실행되고, CMD는 기본값을 제공하거나 재정의될 수 있다.
ENTRYPOINT | CMD | |
목적성 | 컨테이너의 주요 실행 명령을 정의 | 기본 매개변수나 명령을 제공 |
재정의 가능성 | docker run 명령으로 재정의하기 어렵다 | docker run 명령으로 쉽게 재정의할 수 있다 |
사용 방식 | 컨테이너가 실행될 때 반드시 실행되어야 하는 명령을 지정한다 | ENTRYPOINT에 대한 기본 매개변수를 제공하거나, ENTRYPOINT가 지정되지 않았을 때 실행될 기본 명령을 제공 |
ㅁ 마무리
ENTRYPOINT와 CMD를 사용하면서 Docker 컨테이너의 시작 동작을 정의하는 차이를 예제로 정리해 보았다. ENTRYPOINT는 컨테이너의 주요 실행 명령을 정의하고, CMD는 기본 매개변수나 명령을 제공합니다. 두 명령어를 적절히 조합하여 사용하면 유연하고 강력한 Docker 이미지를 만들 수 있다.