레퍼런스
ENTRYPOINT
명령어는 오버라이딩이 어렵고 CMD
명령어는 오버라이딩이 쉽다.docker run
시에 다른 실행 명령어가 있으면 CMD
명령어에 써준 내용은 무시된다. 반면에 ENTRYPOINT
명령어는 무시되지 않고 docker run
에 붙여준 실행 명령어를 인자로 받아서 컨테이너를 실행한다.CMD
명령어는 docker run
명령 내에 명시된 매개변수가 있는 경우 Daemon에서 무시된다.ENTRYPOINT
명령어는 무시되지 않고 대신 명령의 인수로 취급하여 매개변수로 추가된다.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
에 지정한 인자가 기본 이미지를 로드한다.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
명령어는 컨테이너가 시작될 때 필수적으로 특정 명령을 실행해야 하는 경우에 적합하다.ENTRYPOINT
와 CMD
함께 사용하기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에 명시적으로 인자값을 지정하지 않는 경우에 기본 명령어 역할을 하는 인자를 설정하는 데에 사용한다.