如题,我一般是用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"]
Le timing de course est différent.
RUN est exécuté pendant la construction, avant CMD et ENTRYPOINT. Une fois la construction terminée et RUN terminé, exécutez à nouveau CMD ou ENTRYPOINT.
La différence entre ENTRYPOINT et CMD réside dans la façon dont les paramètres sont transmis lors de l'exécution de Docker Run. La commande spécifiée par CMD peut être remplacée par la commande passée par Docker Run. Par exemple, si elle est spécifiée avec CMD :
.Puis exécutez
Ensuite, l'écho spécifié dans CMD sera écrasé par l'écho nouvellement spécifié, donc cela équivaut finalement à exécuter
echo foo
, donc le résultat final imprimé est :Et ENTRYPOINT transmettra tout ce qui suit le nom du conteneur en tant que paramètres à la commande spécifiée (la commande ne sera pas écrasée), comme :
Puis exécutez
Ensuite, les
echo foo
après CONTAINER_NAME sont passés en paramètres à la commande echo spécifiée dans ENTRYPOING, cela équivaut donc à exécuterLe résultat final imprimé est :
De plus, dans le Dockerfile, les paramètres spécifiés par ENTRYPOINT sont antérieurs aux paramètres spécifiés lors de l'exécution de docker run, tels que :
Exécuter
Équivalent à l'exécution :
Le résultat imprimé est :
Un seul ENTRYPOINT peut être spécifié dans le Dockerfile. Si plusieurs sont spécifiés, seul le dernier sera valide.
Lors de l'exécution de la commande docker run, vous pouvez également ajouter le paramètre -entrypoint, qui continuera à transmettre les paramètres spécifiés à ENTRYPOINT, par exemple :
Puis exécutez :
Ensuite, cela équivaut à exécuter
echo foo bar
, et le résultat final estJ'ai traduit un article "15 Docker Tips in 15 Minutes" sur dockboard.org, qui parle des différences entre RUN, CMD et ENTRYPOINT. Vous pouvez vous y référer.
Il existe également une série Docker Quicktips, et il y a un article qui parle également d'ENTRYPIONT. Vous pouvez y jeter un œil, le lien est ici :
http://www.tech-d.net/. 2014/01/27/docker-quicktip-1-entrypoint/
Nous ajouterons bientôt les traductions de cette série d'articles sur dockboard.org, alors restez à l'écoute.
De plus, voici la description du point d'entrée dans la documentation officielle : http://docs.docker.io/en/latest/reference/builder/#entrypoint
Dans le Dockerfile, si ENTRYPOINT et CMD existent, alors CMD est le paramètre de ENTRYPOINT. S'il n'y a pas d'ENTRYPOINT, alors CMD est l'instruction d'exécution par défaut
.