Maison > Questions et réponses > le corps du texte
如题,我一般是用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_lee2017-04-21 10:57:46
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 :
....
CMD ["echo"]
Puis exécutez
docker run CONTAINER_NAME echo foo
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 :
foo
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 :
...
ENTRYPOINT ["echo"]
Puis exécutez
docker run CONTAINER_NAME echo foo
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écuter
echo "echo foo"
Le résultat final imprimé est :
echo foo
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 :
...
ENTRYPOINT ["echo", "foo"]
Exécuter
docker run CONTAINER_NAME bar
Équivalent à l'exécution :
echo foo bar
Le résultat imprimé est :
foo bar
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 :
...
ENTRYPOINT ["echo","foo"]
Puis exécutez :
docker run CONTAINER_NAME bar #注意没有echo
Ensuite, cela équivaut à exécuter echo foo bar
, et le résultat final est
foo bar
J'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
PHPz2017-04-21 10:57:46
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
.