
Options clés de `docker run` : `-d` (détaché), `-p` (ports), `--name` (nom)
Apprenez à utiliser efficacement les options essentielles -d (détaché), -p (publication de ports) et --name (nommage) de la commande `docker run` pour gérer vos conteneurs.
Introduction : prendre le contrôle du lancement de conteneurs
La commande `docker run` est puissante, mais sa véritable efficacité se révèle lorsque l'on maîtrise ses options. Parmi la multitude de paramètres disponibles, trois se distinguent par leur utilité quasi systématique dans les scénarios courants : `-d` pour exécuter en arrière-plan, `-p` pour rendre les services accessibles, et `--name` pour identifier facilement les conteneurs. Comprendre et utiliser correctement ces trois options est fondamental pour passer d'une utilisation basique de Docker à une gestion plus professionnelle et pratique de vos applications conteneurisées.
Sans ces options, les conteneurs s'exécutent par défaut en premier plan, monopolisant votre terminal, leurs services restent inaccessibles depuis votre machine hôte, et ils sont désignés par des identifiants longs et peu mémorables. Ce chapitre se concentre spécifiquement sur ces trois options clés, en détaillant leur fonctionnement, leur syntaxe et les cas d'usage typiques pour chacune.
Maîtriser `-d`, `-p`, et `--name` vous permettra de lancer des serveurs web, des bases de données ou toute autre application de longue durée de manière propre et organisée, tout en facilitant grandement leur administration au quotidien. Voyons en détail comment chacune de ces options transforme votre expérience avec `docker run`.
L'option `-d` ou `--detach` : libérer votre terminal
Par défaut, lorsque vous lancez un conteneur avec `docker run`, votre terminal reste attaché au processus principal du conteneur. Si ce processus est un service de longue durée (comme un serveur web), votre terminal sera bloqué tant que le conteneur tournera. Pour éviter cela et exécuter le conteneur en arrière-plan, on utilise l'option `-d` ou sa forme longue `--detach`.
Lorsque vous utilisez `-d`, Docker démarre le conteneur, puis détache immédiatement votre terminal du processus principal du conteneur. La commande `docker run -d ...` retourne alors l'identifiant complet (ID long) du conteneur fraîchement démarré et vous rend la main sur votre invite de commande. Le conteneur, lui, continue de s'exécuter de manière autonome en arrière-plan.
C'est l'option standard pour lancer des services comme Nginx, Apache, MySQL, PostgreSQL, etc. Voici un exemple simple :
# Lance un conteneur Nginx en arrière-plan
docker run -d nginxAprès l'exécution de cette commande, Nginx tourne dans son conteneur, mais votre terminal est libre. Pour vérifier que le conteneur est bien en cours d'exécution, vous utiliserez la commande `docker ps` qui liste les conteneurs actifs. Sans l'option `-d`, la commande `docker run nginx` afficherait les logs de Nginx directement dans le terminal et le bloquerait.
L'option `-p` ou `--publish` : ouvrir les portes du conteneur
Les conteneurs s'exécutent dans un environnement réseau isolé par défaut. Même si un service écoute sur un port à l'intérieur du conteneur (par exemple, un serveur web sur le port 80), ce port n'est pas accessible depuis votre machine hôte ou le réseau extérieur. L'option `-p` ou `--publish` permet de créer un pont entre un port de votre machine hôte et un port à l'intérieur du conteneur.
La syntaxe la plus courante est `-p PORT_HOTE:PORT_CONTENEUR`. Cela signifie que toute requête arrivant sur le `PORT_HOTE` de votre machine sera redirigée vers le `PORT_CONTENEUR` à l'intérieur du conteneur spécifié. Par exemple, pour rendre accessible le serveur Nginx (qui écoute sur le port 80 par défaut dans son conteneur) sur le port 8080 de votre machine :
# Lance Nginx en arrière-plan et mappe le port 8080 de l'hôte au port 80 du conteneur
docker run -d -p 8080:80 nginxAprès cette commande, vous pouvez ouvrir votre navigateur et accéder à `http://localhost:8080` (ou `http://VOTRE_IP_MACHINE:8080`). Votre requête sur le port 8080 sera transmise par Docker au port 80 du conteneur Nginx, qui vous servira la page par défaut.
Quelques variations utiles de `-p` :
- `-p PORT_CONTENEUR` : Si vous omettez le port hôte (`-p 80`), Docker choisira automatiquement un port disponible sur la machine hôte et l'associera au port 80 du conteneur. Vous pouvez découvrir le port attribué avec `docker ps`.
- `-p IP_HOTE:PORT_HOTE:PORT_CONTENEUR` : Vous pouvez spécifier une adresse IP spécifique de votre hôte sur laquelle le port doit être lié (par exemple, `-p 127.0.0.1:8080:80` pour n'écouter que sur localhost).
- Vous pouvez utiliser l'option `-p` plusieurs fois pour mapper plusieurs ports. Par exemple : `-p 8080:80 -p 4430:443`.
L'option `--name` : donner une identité à vos conteneurs
Lorsque vous lancez un conteneur, Docker lui attribue automatiquement un identifiant unique (un long hash hexadécimal, par exemple `f7a1b4f6c3d8...`) et un nom généré aléatoirement (composé d'un adjectif et d'un nom de scientifique célèbre, comme `jolly_mclean` ou `vigilant_torvalds`). Bien que l'ID soit unique, il est difficile à mémoriser et à utiliser. Les noms aléatoires sont amusants, mais pas très descriptifs.
L'option `--name NOM_DU_CONTENEUR` vous permet d'assigner un nom personnalisé, lisible et significatif à votre conteneur au moment de sa création. Ce nom doit être unique parmi tous les conteneurs (actifs ou arrêtés) sur votre machine Docker.
Utiliser des noms clairs facilite grandement la gestion des conteneurs. Au lieu de manipuler des IDs ou des noms aléatoires, vous pouvez utiliser le nom que vous avez choisi dans d'autres commandes Docker (`docker stop`, `docker start`, `docker logs`, `docker rm`, `docker inspect`, etc.).
Voici comment lancer Nginx en lui donnant un nom explicite :
# Lance Nginx en arrière-plan, mappe le port 8080:80, et nomme le conteneur "mon_serveur_web"
docker run -d -p 8080:80 --name mon_serveur_web nginxMaintenant, pour arrêter ce conteneur spécifique, vous pouvez simplement faire :
docker stop mon_serveur_webC'est bien plus pratique que de devoir d'abord trouver l'ID avec `docker ps` puis utiliser cet ID. Choisir une convention de nommage cohérente pour vos conteneurs est une excellente pratique, surtout lorsque vous commencez à en gérer plusieurs.
Combiner les options pour un lancement efficace
La véritable puissance de ces options réside dans leur combinaison. La plupart du temps, lorsque vous lancez un service destiné à être utilisé, vous utiliserez les trois ensemble : `-d` pour l'exécuter en arrière-plan, `-p` pour exposer le port nécessaire, et `--name` pour lui donner une identité claire.
L'exemple précédent illustre parfaitement cette synergie :
docker run -d -p 8080:80 --name mon_serveur_web nginxCette seule ligne de commande lance un serveur web Nginx de manière autonome, le rend accessible sur le port 8080 de votre machine, et vous permet de le gérer facilement via le nom `mon_serveur_web`. C'est le type de commande que vous utiliserez fréquemment pour déployer rapidement des services.
En maîtrisant ces trois options fondamentales de `docker run`, vous disposez des outils essentiels pour lancer et gérer des conteneurs de manière beaucoup plus efficace et organisée. Elles constituent la base pour interagir de façon productive avec l'écosystème Docker au quotidien.