Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?
ringa_lee
ringa_lee 2017-04-21 10:55:46
0
2
758

如题,我一般是用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_lee
ringa_lee

ringa_lee

répondre à tous(2)
左手右手慢动作

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

PHPzhong

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

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!