L’instruction ENTRYPOINT
de Docker est un outil puissant pour définir le processus principal de votre conteneur. Maîtriser son utilisation, conjointement avec l’instruction CMD
, est essentiel pour construire des images Docker robustes et réutilisables. Cet article explore ENTRYPOINT
et ses applications pratiques.
Table des matières
- Comprendre l’instruction
ENTRYPOINT
- Passer des arguments à
ENTRYPOINT
ENTRYPOINT
vs.CMD
: Une comparaison détaillée- Exemples pratiques et bonnes pratiques
- Conclusion
Comprendre l’instruction ENTRYPOINT
L’instruction ENTRYPOINT
dans un Dockerfile désigne l’exécutable principal lancé lors du démarrage d’un conteneur. Elle définit la fonctionnalité principale du conteneur. Contrairement à CMD
, les arguments fournis à ENTRYPOINT
ne sont pas écrasés par les commandes docker run
; au lieu de cela, ils sont combinés avec les arguments d’exécution. Cela garantit un processus de base cohérent et prévisible tout en permettant une personnalisation au moment de l’exécution.
Par exemple, une image de serveur web pourrait utiliser :
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
Cela garantit qu’Apache s’exécute au premier plan, quelle que soit la façon dont le conteneur est démarré. Les arguments -D FOREGROUND
sont inhérents à l’image.
Passer des arguments à ENTRYPOINT
La véritable puissance de ENTRYPOINT
réside dans sa capacité à accepter des arguments de la commande docker run
. Ceux-ci sont ajoutés à la commande ENTRYPOINT
, permettant une personnalisation sans modifier l’image.
Considérez ce Dockerfile
:
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo $1 && date"]
L’exécution de docker run my-image "Hello from ENTRYPOINT!"
affichera « Hello from ENTRYPOINT! » suivi de la date et de l’heure actuelles. L’argument « Hello from ENTRYPOINT! » est passé au shell et exécuté par la commande echo
. La commande date
de CMD
est également exécutée.
Un exemple plus sophistiqué est un script qui prend un numéro de port :
#!/bin/bash
PORT="${1:-8080}" # Utilise 8080 par défaut si aucun argument n'est fourni.
echo "Démarrage du serveur sur le port : $PORT"
# ... logique du serveur utilisant $PORT ...
ENTRYPOINT
vs. CMD
: Une comparaison détaillée
ENTRYPOINT
définit le processus principal ; CMD
fournit des arguments par défaut pour ce processus. Si les deux sont présents, les arguments docker run
sont ajoutés à la commande ENTRYPOINT
, remplaçant les arguments CMD
. Si seul CMD
est spécifié, il agit comme le processus principal. Utilisez ENTRYPOINT
pour la fonctionnalité principale et CMD
pour les valeurs par défaut ou les options facilement remplaçables.
Exemples pratiques et bonnes pratiques
Exemple 1 : Une application Python simple
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3", "my_app.py"]
Cela exécute directement votre application Python. Tous les arguments de docker run
seront passés à my_app.py
.
Exemple 2 : Utilisation d’un shell pour des commandes plus complexes
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["npm start"]
Ici, vous pouvez commencer avec un shell, puis exécuter n’importe quelle commande dont vous avez besoin, soit par défaut (npm start
), soit en remplacement depuis docker run
.
Bonnes pratiques :
- Utilisez
ENTRYPOINT
pour la commande principale. - Utilisez
CMD
pour les arguments par défaut ou les paramètres facilement modifiables. - Gérez toujours les arguments en toute sécurité dans votre script
ENTRYPOINT
, en vérifiant leur validité et en fournissant des messages d’erreur informatifs.
Conclusion
ENTRYPOINT
est une instruction Docker fondamentale, permettant la création d’images de conteneurs robustes, réutilisables et adaptables. Comprendre son interaction avec CMD
est crucial pour le développement d’applications conteneurisées efficaces. En élaborant soigneusement vos instructions ENTRYPOINT
et CMD
, vous pouvez construire des images Docker plus fiables et plus faciles à maintenir.