Maîtriser Docker Run : Options de commandes essentielles expliquées
Apprenez les indicateurs Docker run les plus utilisés : ports, volumes, variables d'environnement, noms, mode détaché, politiques de redémarrage et nettoyage.
Maîtriser Docker Run : Options de commande essentielles expliquées
docker run crée un nouveau conteneur à partir d'une image et le démarre. La commande semble simple au premier abord, mais les options déterminent comment votre conteneur se connecte au réseau, stocke les données, reçoit la configuration et se comporte après un redémarrage.
Utilisez ce guide lorsque vous connaissez l'image que vous souhaitez exécuter mais avez besoin des bons indicateurs pour une configuration pratique.
Syntaxe de base
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE est le nom de l'image, comme nginx ou postgres:16. COMMAND et ARG... sont facultatifs et remplacent ou étendent la commande par défaut de l'image.
Pour un test rapide en avant-plan :
docker run hello-world
Pour les services réels, vous ajoutez généralement des options.
Exécuter en arrière-plan avec -d
Par défaut, Docker attache votre terminal à la sortie du conteneur. Le mode détaché exécute le conteneur en arrière-plan :
docker run -d nginx
Docker affiche l'ID du nouveau conteneur et vous rend la main. Vérifiez avec :
docker ps
Lisez les journaux d'un conteneur détaché avec :
docker logs <container_id_or_name>
Publier les ports avec -p
Les conteneurs ont leur propre espace de noms réseau. Si un service écoute à l'intérieur du conteneur, publiez le port pour y accéder depuis votre hôte :
docker run -d -p 8080:80 nginx
Cela mappe le port hôte 8080 au port conteneur 80, donc http://localhost:8080 atteint Nginx.
Vous pouvez publier plus d'un port :
docker run -d -p 8080:80 -p 8443:443 nginx
Pour lier uniquement à localhost sur l'hôte, incluez l'IP de l'hôte :
docker run -d -p 127.0.0.1:8080:80 nginx
C'est utile pour les outils locaux que vous ne voulez pas exposer sur toutes les interfaces de l'hôte.
Persister les données avec les volumes
Les couches inscriptibles des conteneurs ne sont pas un bon endroit pour les données durables. Utilisez un montage bind lorsque vous souhaitez monter un chemin hôte spécifique dans le conteneur :
docker run -d -p 8080:80 -v "$PWD/html:/usr/share/nginx/html:ro" nginx
Cela sert les fichiers de votre répertoire local html. Le suffixe :ro rend le montage en lecture seule à l'intérieur du conteneur.
Utilisez un volume nommé lorsque Docker doit gérer l'emplacement de stockage :
docker run -d --name postgres -v pgdata:/var/lib/postgresql/data postgres:16
Si pgdata n'existe pas, Docker le crée. Inspectez les volumes avec :
docker volume ls
Pour les nouveaux travaux, la syntaxe --mount de Docker est plus verbeuse mais plus claire :
docker run -d --mount type=volume,src=pgdata,dst=/var/lib/postgresql/data postgres:16
Passer la configuration avec -e et --env-file
Les variables d'environnement sont un moyen courant de configurer les applications conteneurisées :
docker run -d -e APP_ENV=production my-custom-app:latest
Utilisez -e plusieurs fois pour plusieurs variables :
docker run -d -e DB_HOST=database.example.com -e DB_USER=app my-app:latest
Pour de nombreuses variables, utilisez un fichier d'environnement :
docker run -d --env-file ./app.env my-app:latest
Gardez les secrets hors des fichiers .env commités. Les variables d'environnement sont faciles à inspecter depuis l'hôte et depuis les processus ayant suffisamment d'accès, donc utilisez le gestionnaire de secrets de votre plateforme pour les valeurs de production sensibles.
Nommer les conteneurs avec --name
Docker peut générer un nom, mais un nom clair facilite les commandes ultérieures :
docker run -d --name web -p 8080:80 nginx
Ensuite, vous pouvez utiliser :
docker logs web
docker stop web
docker exec -it web sh
Les noms de conteneurs doivent être uniques. Si web existe déjà, supprimez ou renommez l'ancien conteneur avant de réutiliser le nom.
Utiliser le mode interactif avec -it
Pour les shells et les sessions de dépannage, combinez le mode interactif et un pseudo-TTY :
docker run -it ubuntu bash
Lorsque vous quittez le shell, le conteneur s'arrête. Ajoutez --rm pour les sessions jetables :
docker run --rm -it alpine sh
Choisir une politique de redémarrage
Les politiques de redémarrage indiquent à Docker quoi faire lorsqu'un conteneur se termine :
docker run -d --name web --restart unless-stopped -p 8080:80 nginx
Les politiques courantes sont :
no: ne pas redémarrer automatiquement. C'est la valeur par défaut.on-failure[:max-retries]: redémarrer uniquement après un code de sortie non nul.always: redémarrer chaque fois que le conteneur s'arrête, y compris après un redémarrage du démon Docker.unless-stopped: redémarrer sauf si vous avez explicitement arrêté le conteneur.
Pour les services locaux de longue durée, unless-stopped est souvent un meilleur choix que always car un arrêt manuel reste respecté.
Supprimer les conteneurs jetables avec --rm
Les conteneurs arrêtés restent sur le disque jusqu'à ce que vous les supprimiez. Pour les commandes ponctuelles, --rm nettoie le conteneur après sa sortie :
docker run --rm ubuntu echo "Bonjour depuis un conteneur temporaire"
N'utilisez pas --rm pour les conteneurs dont vous devez inspecter l'état arrêté ultérieurement.
Exemple pratique
Cette commande exécute une application web avec un nom stable, un port publié, un répertoire de logs monté en bind, une variable d'environnement et une politique de redémarrage :
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
Après son démarrage, vérifiez le conteneur et consultez les logs :
docker ps
docker logs my-app
À retenir
Commencez par la plus petite commande docker run qui fonctionne, puis ajoutez les options pour le comportement souhaité : -d pour les services en arrière-plan, -p pour l'accès, -v ou --mount pour les données, -e pour la configuration, --name pour les opérations, --restart pour la résilience, et --rm pour les exécutions temporaires.