ENTRYPOINT
L'instruction ENTRYPOINT
détermine la commande à exécuter au démarrage du conteneur:
...
ENTRYPOINT ["/bin/web-server", "start"]
La syntaxe est sous forme de tableau JSON. Bien que ce ne soit pas obligatoire, c'est la syntaxe recommandée.
Le point d'entrée est remplaçable lors du démarrage d'un conteneur avec l'option --entrypoint
.
CMD
L'instruction CMD
peut également indiquer la commande du conteneur, mais elle peut se combiner avec ENTRYPOINT
si cette dernière est présentée sous forme de tableau JSON:
...
ENTRYPOINT ["/bin/web-server", "start"]
CMD ["-d"]
Le conteneur sera démarré par défaut avec la commande
/bin/web-server start -d
.
Ce qui est spécifié avec CMD
est remplaçable par tout ce qui sera passé en argument au démarrage:
docker run mon-image --debug
La commande sera cette fois
/bin/web-server start --debug
.
ENTRYPOINT vs CMD
Si les 2 instructions sont utilisées, il est recommandé d'utiliser la syntaxe par tableau JSON, et:
-
ENTRYPOINT
spécifie le programme a exécuter et les options nécessaires -
CMD
indique des options courantes mais remplaçables
Exemple de Dockerfile:
FROM php:7.4
EXPOSE 8000
ENTRYPOINT ["php"]
CMD ["-a"]
Nom de l'image:
my-php
Exécution par défaut
docker run -it my-php
[output]Interactive shell
php >
Commande exécutée:
php -a
Les instructions ENTRYPOINT
et CMD
ont été combinées et permettent l'utilisation de PHP en mode interactif.
Exécution avec d'autres options
docker run -p 8000:8000 my-php -S 0.0.0.0:8000 -t /home
[output][Sun Dec 15 14:01:26 2019] PHP 7.4.1 Development Server (http://0.0.0.0:8000) started
Commande exécutée:
php -S 0.0.0.0:8000 -t /home
Ici l'instruction CMD
a été remplacée pour utiliser le serveur web intégré à PHP.
Exécution avec un point d'entrée différent
docker run --entrypoint which my-php php
[output]/usr/local/bin/php
Commande exécutée:
which php
Pour ce conteneur, les 2 instructions ont été remplacées pour chercher l'emplacement du programme php dans le conteneur.