ENTRYPOINT est l’une des options de configuration les plus importantes de Docker. Elle se trouve dans le fichier Dockerfile et vous permet de dicter le comportement par défaut du conteneur. Cette capacité rend ENTRYPOINT extrêmement utile pour automatiser le comportement des conteneurs au moment de l’exécution.

Cet article explore en profondeur l’utilisation de ENTRYPOINT dans Docker, y compris son fonctionnement, pourquoi il est essentiel et comment le configurer correctement.

Explication du Docker ENTRYPOINT

ENTRYPOINT sert de point de départ au processus d’exécution d’un conteneur Docker. Lorsque vous créez une image Docker et que vous l’instanciez en tant que conteneur, la commande ENTRYPOINT est exécutée par défaut.

ENTRYPOINT vous permet de définir l’objectif principal du conteneur, comme l’exécution d’un serveur web, d’une base de données ou d’une application. Elle vous permet également de passer des arguments au moment de l’exécution pour personnaliser le comportement du conteneur.

Syntaxe et utilisation pour ENTRYPOINT

Les deux options syntaxiques pour définir ENTRYPOINT dans un fichier Docker sont la forme shell et la forme exec. Les deux approches impliquent l’insertion d’une ligne dans le fichier Docker. Comme la configuration de ENTRYPOINT n’affecte pas directement le processus de construction, vous pouvez la placer n’importe où dans le fichier. Cependant, la plupart des programmeurs ont tendance à placer la commande ENTRYPOINT vers la fin.

Syntaxe de la forme shell

Lorsque ENTRYPOINT est exécuté sous la forme d’un shell, il invoque un shell de commande pour le traitement. Cette méthode inclut les substitutions de variables d’environnement mais bloque la possibilité d’ajouter des arguments dans la forme exec :

ENTRYPOINT command param1 param2

Ici, command est la commande principale qui s’exécute au démarrage du conteneur. param1 et param2 sont les arguments de la commande.

Syntaxe de la forme Exec

La forme d’exécution n’invoque pas un shell de commande. Il exécute directement la commande et les paramètres spécifiés. Cette méthode vous permet d’ajouter des arguments via CMD ou la ligne de commande d’exécution :

ENTRYPOINT ["executable", "param1", "param2"]

Ici, executable est la commande principale, et param1 et param2 sont les arguments de l’exécutable.

ENTRYPOINT en action

Assemblons une simple commande ENTRYPOINT pour un fichier Docker afin de voir comment cela fonctionne. Vous ne pouvez pas la tester sans démarrer votre conteneur, car ses instructions sont traitées au moment de l’exécution, et non au moment de la construction.

Voici un exemple utilisant la forme exec :

ENTRYPOINT ["python", "app.py"]

Lorsque ce conteneur démarre, il lance un interpréteur Python et exécute le script app.py pour agir comme le comportement par défaut de votre conteneur.

Pour répéter cet exemple avec le formulaire shell, vous devez effectuer un léger changement :

ENTRYPOINT python app.py

Cet exemple lance l’interpréteur Python à partir d’une commande shell au lieu de l’exécuter directement.

ENTRYPOINT avec CMD

CMD est une instruction de Dockerfile qui fournit les arguments par défaut pour un conteneur en cours d’exécution. Ceux-ci peuvent prendre la forme d’une commande exécutable ou servir de paramètres supplémentaires pour l’instruction ENTRYPOINT. Lors du démarrage d’un conteneur, vous pouvez remplacer ces paramètres en fournissant des arguments à la commande docker run.

Comme pour ENTRYPOINT, vous pouvez écrire CMD sous la forme d’une commande exécutable ou d’un shell. La principale différence réside dans le fait que CMD définit des commandes ou des paramètres par défaut que vous pouvez remplacer à partir de la ligne de commande. En revanche, ENTRYPOINT configure les conteneurs pour qu’ils s’exécutent en tant qu’exécutables, ce qui signifie que vous ne pouvez pas remplacer la commande à partir de la ligne de commande.

Vous pouvez utiliser CMD pour étendre les fonctionnalités de ENTRYPOINTet donner à votre image une plus grande flexibilité. La combinaison des deux vous permet de personnaliser le comportement de votre image, les valeurs de CMD servant d’arguments par défaut pour l’instruction ENTRYPOINT. Cette méthode vous permet de définir une commande par défaut via ENTRYPOINT et des arguments par défaut via CMD.

Contrairement à l’utilisation de ENTRYPOINT seul, cette approche vous permet d’ignorer les paramètres transmis lors de la commande docker run.

Pour rendre l’exemple ci-dessus plus flexible, vous pouvez inclure une commande CMD:

ENTRYPOINT ["python", "app.py"]
CMD ["--help"]

Dans cet exemple, le démarrage d’un conteneur Docker sans fournir d’arguments de ligne de commande signifie que python app.py --help sera exécuté par défaut. Cependant, si vous fournissez des arguments lors du démarrage du conteneur (tels que docker run <image> --version), les arguments par défaut de CMD seront remplacés par python app.py --version. Cette approche vous offre une plus grande flexibilité lors de l’exécution de vos conteneurs.

Cas d’utilisation de ENTRYPOINT dans Docker

L’utilisation la plus courante de ENTRYPOINT est de configurer des images pour des applications ou des services spécifiques. Par exemple, si vous créez une image pour exécuter une application Python, vous pouvez utiliser ENTRYPOINT pour spécifier que l’interpréteur Python doit s’exécuter.

Vous pouvez également utiliser ENTRYPOINT lorsque vous créez des images Docker pour les pipelines d’intégration et de déploiement continus (CI/CD). Vous pouvez utiliser ces images pour encapsuler l’environnement nécessaire à chaque étape afin de garantir la cohérence. Par exemple, vous pouvez créer une image Docker dont l’adresse ENTRYPOINT correspond à un script de test. Cette image exécute automatiquement ces tests à chaque fois qu’elle s’exécute pour fournir un environnement de test cohérent et reproductible.

ENTRYPOINT docker est également utile pour déboguer les applications conteneurisées. En démarrant une session shell avec ENTRYPOINT, vous pouvez interagir avec l’environnement de l’application à l’intérieur du conteneur. Ces interactions comprennent l’exécution de commandes, l’exploration de fichiers et l’inspection de l’état de l’application. Une fois le problème résolu, vous pouvez reconstruire l’image Docker avec l’adresse ENTRYPOINT appropriée pour exécuter l’application.

Comment remplacer ENTRYPOINT

Il est possible de remplacer le ENTRYPOINT d’une image Docker au moment de l’exécution pour plus de flexibilité. Vous pouvez le faire en fournissant une commande après le nom de l’image dans la commande docker run.

Par exemple, si votre image a un script Python comme ENTRYPOINT, mais que vous voulez ouvrir un shell à l’intérieur du conteneur à la place, vous pouvez exécuter ce qui suit :

docker run --entrypoint <image> “/bin/bash”

Ce script remplace la version par défaut de l’application ENTRYPOINT et lance un shell bash.

De même, pour exécuter un script Python différent, vous pouvez fournir ce script comme commande. Cette tactique vous donne la possibilité d’exécuter votre conteneur avec un paramètre différent de ceux décrits à l’origine dans votre fichier Docker ENTRYPOINT.

Meilleures pratiques pour l’utilisation d’ENTRYPOINT dans Docker

Parce que ENTRYPOINT est une commande cruciale pour Docker, il est important de suivre ces bonnes pratiques pour maximiser son utilisation.

Gardez les conteneurs concentrés sur une seule responsabilité

ENTRYPOINT la commande Docker spécifie les responsabilités de votre conteneur Docker. À l’instar des micro-services, chaque conteneur doit se concentrer sur une seule responsabilité, un seul service ou une seule partie de l’application. Cette approche augmente la modularité et l’évolutivité de votre application, ce qui facilite le développement, les tests et la maintenance.

S’assurer que les scripts ENTRYPOINT sont exécutables et correctement formatés

Faire en sorte que les scripts ENTRYPOINT soient exécutables et correctement formatés permet d’éviter des problèmes tels que des erreurs de syntaxe et de permission.

Pour vous assurer que les scripts ENTRYPOINT sont exécutables, vous pouvez utiliser l’instruction suivante RUN chmod +x:

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Cet exemple copie le script entrypoint.sh dans le conteneur et utilise l’instruction RUN chmod +x pour le rendre exécutable. Il définit ensuite l’adresse ENTRYPOINT pour utiliser le script entrypoint.sh.

Vous pouvez également utiliser un linter comme ShellCheck pour vérifier la syntaxe et le style des scripts afin de garantir un formatage correct.

Évitez de coder des valeurs en dur dans les scripts ENTRYPOINT

L’utilisation de variables d’environnement ou d’arguments de ligne de commande au lieu du codage en dur peut rendre vos scripts plus flexibles. Cela vous permet également de configurer le chemin d’accès au fichier depuis l’extérieur du conteneur.

Par exemple, au lieu de coder en dur un chemin de fichier dans le script ENTRYPOINT comme ceci :

#!/bin/bash
echo "Starting my application..."
./my-app -f /path/to/my/file.txt

Vous pouvez utiliser une variable comme celle-ci :

#!/bin/bash
echo "Starting my application..."
./my-app -f "${MY_FILE}"

L’utilisation de variables permet de personnaliser votre image à la volée, ce qui vous permet d’en faire plus sans avoir à réécrire votre fichier Docker.

Docker et Kinsta travaillent ensemble

Kinsta offre une plateforme puissante et flexible pour déployer des applications web à l’aide de Docker. Elle vous aide à construire et à déployer des images Docker personnalisées pour plus de contrôle et de flexibilité sur votre environnement d’hébergement.

Que vous construisiez un environnement d’hébergement personnalisé ou que vous fassiez évoluer votre application pour gérer plus de trafic, Kinsta fournit les outils et le support dont vous avez besoin pour réussir.

Résumé

ENTRYPOINT est un outil essentiel pour configurer les conteneurs Docker. Il définit la commande par défaut qui s’exécute lorsqu’un conteneur démarre à partir d’une image, définissant ainsi sa fonction principale. Vous pouvez utiliser ENTRYPOINT pour exécuter des applications spécifiques, aider dans les pipelines CI/CD, ou combiner avec CMD pour un comportement de conteneur plus flexible.

Docker est actuellement l’outil de développement le plus populaire, ce qui le rend essentiel pour divers déploiements conteneurisés. Pour en savoir plus sur Docker, parcourez les articles de Kinsta et découvrez Kinsta pour l’hébergement de vos applications conteneurisées.

Kinsta rend votre flux de développement plus facile et plus efficace. Des fonctionnalités telles que les applications conteneurisées sur l’infrastructure GCP fonctionnant sur des machines C2 avec 37 centres de données disponibles, l’intégration premium avec Cloudflare pour un CDN haute performance qui sert votre site à partir de 260+ points de présence (PoP), la protection DDoS du pare-feu au niveau de l’entreprise, le cache edge, et la surveillance du temps de fonctionnement (avec une garantie de temps de fonctionnement de 99 %), assurent que votre application fonctionne rapidement, en toute sécurité, et qu’elle est disponible de manière fiable pour l’Internet.

Marcia Ramos Kinsta

I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 7 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.