28/11/2022

6. ENTRYPOINT & CMD

Lu 1089 fois Licence Creative Commons

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.