如题,我一般是用CMD来指定的,比如:
FROM thelanddownunder
MAINTAINER ProgrammingLife
CMD ["apt-get install htop"]
但是看一些Dockerfile里也有用ENTRYPOINT来指定的,就是把上面的CMD换成ENTRYPOINT,后面好像也是指定一些命令的:
FROM thelanddownunder
MAINTAINER ProgrammingLife
ENTRYPOINT ["apt-get install htop"]
请问这两种方法有什么不一样的吗?另外,还有用RUN来指定命令的,语法和上面两种又不太一样,比如这样:
FROM thelanddownunder
MAINTAINER ProgrammingLife
RUN apt-get install htop
ENTRYPOINT ["apt-get install vim"]
실행 타이밍이 다릅니다.
RUN은 빌드 도중 CMD 및 ENTRYPOINT 이전에 실행됩니다. 빌드가 완료되고 RUN이 완료된 후 CMD 또는 ENTRYPOINT를 다시 실행하세요.
ENTRYPOINT와 CMD의 차이점은 docker run을 실행할 때 매개변수가 전달되는 방식입니다. 예를 들어 CMD로 지정된 경우 CMD로 지정된 명령이 재정의될 수 있습니다. 으아악
그럼 달리세요으아악
그러면 CMD에 지정된 에코가 새로 지정된 에코로 덮어쓰기되므로 궁극적으로를 실행하는 것과 동일하므로 최종 인쇄 결과는
그리고 ENTRYPOINT는 컨테이너 이름 뒤의 모든 항목을 지정된 명령에 대한 매개변수로 전달합니다(명령은 덮어쓰지 않음).echo foo
입니다. 으아악으아악
그럼 달리세요으아악
그러면 CONTAINER_NAME 뒤의이 ENTRYPOING에 지정된 echo 명령에 매개변수로 전달되므로
최종 인쇄 결과는 다음과 같습니다.echo foo
을 실행하는 것과 동일합니다. 으아악으아악
또한 Dockerfile에서 ENTRYPOINT로 지정된 매개변수는 다음과 같이 docker run을 실행할 때 지정된 매개변수보다 이전입니다.으아악
실행으아악
실행과 동일:으아악
인쇄된 결과는 다음과 같습니다.으아악
Dockerfile에는 ENTRYPOINT를 하나만 지정할 수 있습니다. 여러 개를 지정하는 경우 마지막 항목만 유효합니다.으아악
그런 다음 실행:으아악
그러면을 실행하는 것과 동일하며 최종 결과는
dockboard.org에서 RUN, CMD, ENTRYPOINT의 차이점을 설명하는 "15분 안에 15가지 Docker 팁"이라는 기사를 번역한 것을 참고하시면 됩니다.echo foo bar
입니다. 으아악http://www.tech-d.net/ 2014/01/27/docker-quicktip-1-entrypoint/
곧 이 기사 시리즈의 번역을 Dockboard.org에 추가할 예정이니 계속 지켜봐 주시기 바랍니다.Dockerfile에 ENTRYPOINT와 CMD가 있으면 CMD가 ENTRYPOINT의 매개변수입니다.