#docker #kubernetes #container #orchestrator #microservice #infrastructure-as-code #devops #ci #cd

제목[Q&A] dockerfile에서 ENTRYPOINT와 CMD의 차이점2019-12-12 20:26
작성자

ENTRYPOINT와 CMD는 모두 무언가를 실행하는 명령어입니다.

하지만 이 두 명령어 사이에는 약간의 차이점이 존재합니다.


https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact 

우선 공식문서에서 설명하는 두 명령어의 차이입니다.


좀 더 자세히 알아보기 위해 실제로 조금씩 차이를 두어서 빌드 해봤습니다.


test1:0.3에서는 

ENTRYPOINT echo entry1

CMD ["echo", "cmd1"]


test1:0.4에서는

ENTRYPOINT ["echo", "entry1"]

CMD["echo", "cmd1"]


test1:0.5에서는

ENTRYPOINT ["echo", "entry1"]

CMD echo cmd1


test1:0.6에서는

CMD echo cmd1


위와 같이 빌드했습니다. 실행결과는 다음과 같습니다.mb-file.php?path=2019%2F12%2F12%2FF600_QnA%203-1.PNG


test1:0.3의 결과를 보면, ENTRYPOINT의 parameter를 리스트를 사용하지 않고 실행했을 경우

CMD로 실행할 명령어와 컨테이너 실행시 입력한 명령어는 모두 무시되는 것을 볼 수 있습니다.


test1:0.4의 결과를 보면, ENTRYPOINT의 parameter를 리스트 형식으로 사용했을 시에

CMD로 입력한 결과가 출력된 것을 볼 수 있습니다.

하지만 컨테이너 실행시 뒤에 추가로 명령어를 입력하면 CMD 명령은 무시됩니다.


test1:0.5의 결과를 보면 parameter를 리스트로 입력했을 때와 문자열로 입력했을 때의

차이점을 확실히 알 수 있습니다.

문자열로 ENTRYPOINT와 CMD의 parameter를 입력하면 자동으로 앞에 '/bin/sh -c' 라고 쉘 실행 명령어가 붙습니다.





댓글