>  Q&A  >  본문

Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?

如题,我一般是用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"]
ringa_leeringa_lee2711일 전759

모든 응답(2)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-21 10:57:46

    실행 타이밍이 다릅니다.

    RUN은 빌드 도중 CMD 및 ENTRYPOINT 이전에 실행됩니다. 빌드가 완료되고 RUN이 완료된 후 CMD 또는 ENTRYPOINT를 다시 실행하세요.

    ENTRYPOINT와 CMD의 차이점은 docker run을 실행할 때 매개변수가 전달되는 방식입니다. 예를 들어 CMD로 지정된 경우 CMD로 지정된 명령이 재정의될 수 있습니다. 으아악

    그럼 달리세요

    으아악

    그러면 CMD에 지정된 에코가 새로 지정된 에코로 덮어쓰기되므로 궁극적으로

    를 실행하는 것과 동일하므로 최종 인쇄 결과는 echo foo입니다. 으아악

    그리고 ENTRYPOINT는 컨테이너 이름 뒤의 모든 항목을 지정된 명령에 대한 매개변수로 전달합니다(명령은 덮어쓰지 않음).

    으아악

    그럼 달리세요

    으아악

    그러면 CONTAINER_NAME 뒤의

    이 ENTRYPOING에 지정된 echo 명령에 매개변수로 전달되므로 echo foo을 실행하는 것과 동일합니다. 으아악

    최종 인쇄 결과는 다음과 같습니다.

    으아악

    또한 Dockerfile에서 ENTRYPOINT로 지정된 매개변수는 다음과 같이 docker run을 실행할 때 지정된 매개변수보다 이전입니다.

    으아악

    실행

    으아악

    실행과 동일:

    으아악

    인쇄된 결과는 다음과 같습니다.

    으아악

    Dockerfile에는 ENTRYPOINT를 하나만 지정할 수 있습니다. 여러 개를 지정하는 경우 마지막 항목만 유효합니다.

    docker run 명령을 실행할 때 -entrypoint 매개변수를 추가할 수도 있습니다. 그러면 지정된 매개변수가 ENTRYPOINT에 계속 전달됩니다. 예:

    으아악

    그런 다음 실행:

    으아악

    그러면

    을 실행하는 것과 동일하며 최종 결과는 echo foo bar입니다. 으아악

    dockboard.org에서 RUN, CMD, ENTRYPOINT의 차이점을 설명하는 "15분 안에 15가지 Docker 팁"이라는 기사를 번역한 것을 참고하시면 됩니다.

    Docker Quicktips 시리즈도 있고 그 안에 ENTRYPIONT에 대해서도 설명하는 기사가 있습니다. 링크는 여기입니다:

    http://www.tech-d.net/ 2014/01/27/docker-quicktip-1-entrypoint/

    곧 이 기사 시리즈의 번역을 Dockboard.org에 추가할 예정이니 계속 지켜봐 주시기 바랍니다.

    또한 공식 문서의 진입점에 대한 설명은 다음과 같습니다: http://docs.docker.io/en/latest/reference/builder/#entrypoint

    회신하다
    0
  • PHPz

    PHPz2017-04-21 10:57:46

    Dockerfile에 ENTRYPOINT와 CMD가 있으면 CMD가 ENTRYPOINT의 매개변수입니다.

    회신하다
    0
  • 취소회신하다