L'une des directives communes dans un dockerfile est la directive d'entrée. Cette directive spécifie l'exécutable qui s'exécute pendant la création de conteneurs à partir de l'image dockerfile.
Ce guide examine comment fonctionne la directive de point d'entrée dans Docker et comment l'utiliser dans Dockerfiles.
Utilisation de base
La directive d'entrée dans un dockerfile prend deux formes, formulaire exécutif et forme de coquille. Avoir une directive d'entrée dans le Dockerfile empêche le conteneur de démarrer et de s'arrêter automatiquement.
La syntaxe générale pour la directive d'entrée est:
Formulaire EXEC:
EntryPoint [Exec, option1, option2… optionn]
L'exec représente l'exécutable à exécuter; Les options sont les paramètres à exécuter vers l'exécutable.
L'autre forme de la directive EnteryPoint est la forme shell. Le formulaire Shell s'exécute en sous-commande de / bin / sh -c [commande]. La syntaxe générale de ce formulaire est comme:
Option de commande d'entrée 1, option2… Option
De même, la commande est un exécutable de shell, tandis que les options représentent les paramètres à passer à la commande.
Comment fonctionne le point d'entrée
En un mot, la directive de point d'entrée dans un dockerfile permet aux conteneurs créés à partir de l'image d'exécuter un exécutable après la création. Malheureusement, les deux formes de la directive de point d'entrée ont tendance à se comporter différemment:
La forme shell de la directive d'entrée ne prend pas en charge les arguments de commande lors du démarrage du conteneur. De plus, contrairement au formulaire EXEC qui exécute l'exécutable en arrière-plan, le formulaire Shell s'exécute en sous-marin / bin / sh -c lançant le processus avec une valeur PID différente de celle du processus de conteneur.
D'un autre côté, le formulaire EXEC prend en charge les arguments pendant la création de conteneurs. Cela signifie que la commande est exécutée après l'exécutable défini sur le point d'entrée. Ainsi, par exemple, si vous ajoutez une option à la commande docker run, il s'exécute en arrière-plan après l'ensemble exécutable dans le point d'entrée. De plus, Docker vous permet de remplacer la valeur de point d'entrée en utilisant l'option -esrypoint pendant la création de conteneurs.
Exemple 1: formulaire Exec
Illustrons comment fonctionne le formulaire EXEC. Dans cet exemple, nous utilisons une image Nginx comme cas de test.
Un exemple de dockerfile contient les entrées comme:
De Debian: dernier
Exécutez la mise à jour apt-get && \
APT-Get Installer -y nginx
Étiquette maintellerer = "Linuxhint"
Étiqueter la version = "1.0 "
Étiquette Description = "Une image simple exécutant nginx sur Debain 10"
Exposer 80 / TCP
Entrée ["nginx", "-g", "Daemon Off;" ]]
Créons l'image à partir du fichier docker en tant que:
docker build --trul - rm -f "dockerfile-t nginx: personnalisé"."
Avec l'image, créons un conteneur et lançons un shell dans le conteneur.
docker exec -it f3538752d6c3 bash
À l'intérieur du shell de conteneur, effectuons des commandes de base et installez quelques packages.
root @ f3538752d6c3: / # sudo apt-get update && apt-get install htop
Si vous exécutez HTOP à l'intérieur du conteneur, vous obtiendrez une sortie similaire à celle ci-dessous:
Si vous ignorez tous les processus de travail Nginx et HTOP, vous remarquez que le démon Nginx principal fonctionne comme PID de 1.
Exemple 2: formulaire de coquille
Si vous changez le dockerfile pour regarder comme indiqué dans les entrées ci-dessous:
De Debian: dernier
Exécutez la mise à jour apt-get && \
APT-Get Installer -y nginx
Étiquette maintellerer = "Linuxhint"
Étiqueter la version = "1.0 "
Étiquette Description = "Une image simple exécutant nginx sur Debain 10"
Exposer 80 / TCP
Entrée "nginx" "- g" "Daemon OFF;"
Construisez l'image et créez un conteneur.
docker build --pull --rm -f "dockerfile.dockerfile "-t nginx: personnalisé"."
docker run -d --name nginx-exec-form nginx: coutume
À l'intérieur du conteneur, si nous exécutons la commande htop, nous voyons que le processus de travail Nginx s'exécute sous / bin / sh -c comme:
Vous pouvez également obtenir une sortie similaire en examinant le conteneur à l'aide de la commande docker inspecter comme:
Récapitulatif rapide
Il est bon de ne pas confondre le point d'entrée Docker et les directives Docker CMD. Bien que les deux directives définissent les commandes à Docker s'exécutent pendant l'exécution du conteneur:
Assurez-vous d'utiliser la directive DockerFile d'entrée lors de l'exécution du conteneur comme exécutable.
Utilisez CMD pour définir les arguments par défaut pour le point d'entrée ou pour exécuter des commandes ad hoc dans le conteneur.
NOTE: Les arguments CMD seront remplacés lors de l'exécution du conteneur avec d'autres arguments.
Comme indiqué précédemment, tout dockerfile doit inclure soit CMD ou directive d'entrée.
En conclusion.
En conclusion, Docker EntryPoint est un choix bien approprié lors de la définition de l'exécutable pour les conteneurs. Pour en savoir plus, consultez la documentation.