ENTRYPOINT, CMD 차이

inhalin·2023년 1월 29일
2

모두를 위한 CI/CD

목록 보기
1/1

레퍼런스

  • 둘 다 컨테이너 시작시 실행할 명령어를 지정해준다. 컨테이너를 시작하려면 둘 중에 하나는 지정해주어야 한다.
  • ENTRYPOINT 명령어는 오버라이딩이 어렵고 CMD 명령어는 오버라이딩이 쉽다.
  • docker run 시에 다른 실행 명령어가 있으면 CMD 명령어에 써준 내용은 무시된다. 반면에 ENTRYPOINT 명령어는 무시되지 않고 docker run에 붙여준 실행 명령어를 인자로 받아서 컨테이너를 실행한다.
  • CMD 명령어는 docker run 명령 내에 명시된 매개변수가 있는 경우 Daemon에서 무시된다.
  • ENTRYPOINT 명령어는 무시되지 않고 대신 명령의 인수로 취급하여 매개변수로 추가된다.

CMD 명령어 사용 예시

FROM centos:7
CMD ["echo", "Hello, Darwin"]
docker build -t hello:cmd .
docker run hello:cmd
Hello, Darwin
docker run hello:cmd world
world
  • CMD 명령어를 사용하는 가장 좋은 방법은 사용자가 command line에 인자를 입력하지 않을 때 실행할 기본 프로그램을 지정하는 것이다.
  • 컨테이너 이미지가 실행되는 즉시 애플리케이션을 시작하여 컨테이너가 실행 상태에 있도록 한다. 이렇게 하면 컨테이너가 시작되자마자 CMD에 지정한 인자가 기본 이미지를 로드한다.
  • 특정 사용 사례에서 CLI를 통해 docker run 명령을 실행하여 Dockerfile 내에 지정된 지침을 재정의할 수 있다.

ENTRYPOINT 명령어 사용 예시

FROM centos:7
ENTRYPOINT ["echo", "Hello, Darwin"]
docker build -t hello:entrypoint
docker run hello:entrypoint
Hello, Darwin
docker run hello:entrypoint world
Hello, Darwin world
  • ENTRYPOINT 명령어는 컨테이너가 시작될 때 필수적으로 특정 명령을 실행해야 하는 경우에 적합하다.

ENTRYPOINTCMD 함께 사용하기

  • 두 개를 혼합하는 가장 보편적인 사용 사례는 컨테이너 시작 작업을 자동화하는 것이다. CMD를 사용하여 매개 변수를 정의하고 ENTRYPOINT 명령을 사용하여 실행 파일을 정의할 수 있다.
FROM centos:7
ENTRYPOINT ["echo", "Hello,"]
CMD ["Darwin"]
docker build -t hello:together .
docker run hello:together
Hello, Darwin # 매개변수 없이 컨테이너를 실행하면 CMD에 지정한 인자 사용
docker run hello:together world
Hello, world # 매개변수 넘겨주면 CMD 기본값은 오버라이딩되어 무시됨

결론

  • 항상 실행해야 하는 명령을 사용하여 실행 가능한 도커 이미지를 빌드할 때는 ENTRYPOINT를 사용한다.
  • CMD 명령어는 도커 컨테이너가 실행될 때 command line에 명시적으로 인자값을 지정하지 않는 경우에 기본 명령어 역할을 하는 인자를 설정하는 데에 사용한다.

0개의 댓글