Maîtriser Docker Run : Options Essentielles de Commande Expliquées
La commande docker run de Docker est la pierre angulaire de la création et du démarrage de conteneurs à partir de vos images Docker. Bien qu'un simple docker run <nom_image> puisse vous permettre de commencer, exploiter tout le potentiel des conteneurs nécessite de comprendre ses nombreuses options. Cet article explore les options les plus essentielles de docker run, vous permettant de gérer le réseau, de configurer les variables d'environnement, de persister les données avec des volumes et de contrôler l'exécution du conteneur en mode détaché.
Comprendre ces options est crucial pour une conteneurisation efficace, vous permettant de construire des applications robustes, flexibles et gérables. Que vous exécutiez un serveur web, une base de données ou un microservice complexe, la maîtrise de docker run améliorera considérablement votre flux de travail Docker.
Les Bases de docker run
La syntaxe fondamentale de la commande docker run est la suivante :
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS]: Ce sont les indicateurs qui modifient le comportement du conteneur.IMAGE: Le nom de l'image Docker à partir de laquelle créer le conteneur (par exemple,ubuntu,nginx:latest).[COMMAND]: Une commande optionnelle à exécuter à l'intérieur du conteneur, remplaçant la commande par défaut de l'image.[ARG...]: Arguments pour la commande.
Explorons quelques-unes des options les plus percutantes.
Options Clés de docker run Expliquées
Mode Détaché (-d ou --detach)
Par défaut, docker run démarre un conteneur en premier plan, connectant votre terminal à ses flux d'entrée, de sortie et d'erreur standard. Cela signifie que votre terminal est occupé jusqu'à ce que le conteneur s'arrête. Le mode détaché (-d) permet au conteneur de s'exécuter en arrière-plan, libérant ainsi votre terminal.
Exemple :
docker run -d nginx
Cette commande démarre un conteneur de serveur web Nginx en arrière-plan. Vous verrez un long ID de conteneur s'afficher sur votre terminal, et votre invite reviendra immédiatement.
Astuce : Pour voir les journaux d'un conteneur détaché, utilisez docker logs <id_ou_nom_conteneur>.
Publication de Ports (-p ou --publish)
Les conteneurs sont des environnements réseau isolés. Pour exposer un service d'un conteneur à la machine hôte ou à d'autres machines sur le réseau, vous devez publier des ports. L'indicateur -p vous permet de publier un port de conteneur vers un port spécifique sur l'hôte.
Le format est -p <port_hote>:<port_conteneur>.
Exemple :
Exécution d'un conteneur Nginx et publication du port 80 du conteneur vers le port 8080 sur l'hôte :
docker run -d -p 8080:80 nginx
Maintenant, vous pouvez accéder au serveur Nginx en naviguant vers http://localhost:8080 dans votre navigateur web.
Publications de Ports Multiples : Vous pouvez publier plusieurs ports en utilisant l'indicateur -p plusieurs fois :
docker run -d -p 8080:80 -p 4430:443 nginx
Spécification de l'Adresse IP : Vous pouvez également spécifier l'adresse IP de l'hôte à laquelle se lier :
docker run -d -p 127.0.0.1:8080:80 nginx
Ceci lie le port 8080 sur l'hôte uniquement à l'interface de bouclage (localhost).
Montage de Volumes (-v ou --volume)
Les systèmes de fichiers des conteneurs sont éphémères par défaut. Lorsqu'un conteneur est supprimé, toutes les données créées ou modifiées à l'intérieur sont perdues. Les volumes fournissent un mécanisme pour persister les données en dehors du cycle de vie du conteneur. Vous pouvez monter un répertoire de votre machine hôte dans le conteneur ou utiliser des volumes gérés par Docker.
Le format de base est -v <chemin_hote>:<chemin_conteneur>.
Exemple :
Montage d'un répertoire local ~/my-nginx-html dans le répertoire HTML par défaut de Nginx (/usr/share/nginx/html) à l'intérieur du conteneur :
docker run -d -p 8080:80 -v ~/my-nginx-html:/usr/share/nginx/html nginx
Tous les fichiers HTML que vous placerez dans ~/my-nginx-html sur votre hôte seront servis par Nginx. Les modifications apportées à ces fichiers seront immédiatement reflétées à l'intérieur du conteneur.
Volumes Nommés : Les volumes nommés gérés par Docker sont souvent préférés pour une meilleure portabilité et gestion :
docker run -d -p 8080:80 -v my-nginx-data:/usr/share/nginx/html nginx
Si my-nginx-data n'existe pas, Docker le créera. Vous pouvez gérer ces volumes en utilisant docker volume ls, docker volume create et docker volume rm.
Variables d'Environnement (-e ou --env)
Les variables d'environnement sont des paires clé-valeur qui peuvent être utilisées pour configurer les applications s'exécutant à l'intérieur des conteneurs. L'indicateur -e vous permet de définir ces variables.
Exemple :
Définition d'une variable de configuration personnalisée pour une application :
docker run -d -e APP_ENV=production my-custom-app:latest
Définition de Variables Multiples : Utilisez -e plusieurs fois :
docker run -d -e DB_HOST=database.example.com -e DB_USER=admin my-app:latest
Utilisation de fichiers .env : Pour gérer de nombreuses variables, vous pouvez utiliser l'indicateur --env-file :
docker run -d --env-file ./app.env my-app:latest
Où app.env pourrait contenir :
DB_HOST=database.example.com
DB_USER=admin
Astuce : Soyez prudent quant à l'intégration d'informations sensibles (comme les mots de passe) directement dans les variables d'environnement ou les fichiers .env qui sont intégrés au contrôle de version.
Nommage du Conteneur (--name)
Lorsque vous exécutez un conteneur, Docker lui attribue un nom hexadécimal aléatoire, souvent long. L'attribution d'un nom personnalisé et lisible par l'homme à l'aide de l'indicateur --name facilite grandement la référence au conteneur ultérieurement pour des commandes comme docker stop, docker logs ou docker exec.
Exemple :
docker run -d --name my-webserver -p 8080:80 nginx
Vous pouvez maintenant faire référence à ce conteneur sous le nom my-webserver au lieu de son ID.
Avertissement : Les noms de conteneurs doivent être uniques. Si un conteneur portant ce nom existe déjà, docker run échouera.
Mode Interactif et TTY (-i, -t, ou -it)
Pour exécuter des commandes nécessitant une interaction utilisateur ou un pseudo-terminal (comme un shell), vous utiliserez les indicateurs -i (interactif) et -t (allouer un pseudo-TTY). Souvent, ils sont combinés en -it.
Exemple :
Exécution d'un shell bash interactif à l'intérieur d'un conteneur Ubuntu :
docker run -it ubuntu bash
Cette commande démarre un conteneur Ubuntu, exécute bash et attache votre terminal à celui-ci, vous permettant de taper des commandes comme si vous étiez connecté à un système Linux. Lorsque vous quittez le shell (exit), le conteneur s'arrêtera.
Politiques de Redémarrage (--restart)
Les politiques de redémarrage définissent si un conteneur doit être redémarré automatiquement s'il s'arrête, et dans quelles conditions.
no: Ne pas redémarrer automatiquement le conteneur (par défaut).on-failure[:max_retries]: Redémarrer uniquement si le conteneur se termine avec un code de sortie non nul. Vous pouvez éventuellement spécifier un nombre maximal de tentatives.always: Toujours redémarrer le conteneur s'il s'arrête, quel que soit le statut de sortie.unless-stopped: Toujours redémarrer le conteneur, sauf s'il a été explicitement arrêté par l'utilisateur ou le démon Docker.
Exemple :
Pour vous assurer que votre serveur web redémarre automatiquement en cas de crash :
docker run -d --name my-resilient-webserver --restart always -p 8080:80 nginx
Suppression du Conteneur à la Sortie (--rm)
Pour les conteneurs temporaires, en particulier pendant le développement ou les tests, vous souhaitez souvent que le conteneur soit automatiquement supprimé une fois qu'il est terminé. L'indicateur --rm gère cela.
Exemple :
Exécution d'une commande dans un conteneur temporaire et sa suppression ultérieure :
docker run --rm ubuntu echo "Hello from a temporary container"
Une fois que la commande echo est terminée et que le conteneur s'est arrêté, il sera automatiquement supprimé. Cela permet de garder votre système propre des anciens conteneurs arrêtés.
Mise en Pratique : Un Exemple Concret
Combinons plusieurs options pour exécuter une application web personnalisée :
- Exécuter en mode détaché (
-d). - Attribuer un nom (
--name my-app). - Publier le port 3000 de l'hôte vers le port 80 du conteneur (
-p 3000:80). - Monter un répertoire local pour les journaux (
-v $(pwd)/logs:/app/logs). - Définir une variable d'environnement (
-e NODE_ENV=production). - S'assurer qu'il redémarre en cas d'échec (
--restart on-failure). - Utiliser une image spécifique (
my-node-app:1.0).
docker run -d --name my-app --restart on-failure -p 3000:80 -v $(pwd)/logs:/app/logs -e NODE_ENV=production my-node-app:1.0
Cette commande déploie efficacement votre application, la rendant accessible, permettant la persistance des journaux et assurant un certain niveau de résilience.
Conclusion
La commande docker run est bien plus polyvalente que son usage de base ne le suggère. En tirant parti d'options telles que -d, -p, -v, -e, --name et --rm, vous obtenez un contrôle précis sur vos applications conteneurisées. La maîtrise de ces options essentielles est une étape fondamentale pour construire et gérer efficacement et de manière fiable des environnements conteneurisés sophistiqués. Continuez à expérimenter avec ces options pour les intégrer pleinement dans vos flux de travail Docker.