
Lancer un conteneur à partir d'une image (`docker run`)
Apprenez à utiliser la commande essentielle `docker run` pour créer et démarrer des conteneurs Docker à partir d'images locales ou de Docker Hub. Explorez les options clés.
La commande `docker run` : donner vie aux images
Après avoir trouvé et téléchargé l'image souhaitée avec `docker search` et `docker pull`, l'étape suivante est de l'utiliser pour créer et démarrer une instance exécutable : un conteneur. C'est précisément le rôle de la commande `docker run`. Elle est sans doute la commande Docker la plus fondamentale et la plus utilisée, car elle est le point d'entrée pour exécuter vos applications et services conteneurisés.
Fondamentalement, `docker run` combine deux actions en une seule : la création d'une nouvelle couche de conteneur inscriptible au-dessus de l'image spécifiée (`docker create`) et le démarrage de ce conteneur (`docker start`). Si l'image que vous demandez n'est pas déjà présente sur votre machine locale, `docker run` tentera automatiquement de la télécharger depuis Docker Hub (ou un autre registre configuré) en effectuant un `docker pull` implicite avant de procéder à la création et au démarrage.
La flexibilité de `docker run` provient de sa capacité à accepter de nombreuses options pour configurer finement le comportement du conteneur lors de son lancement. Nous allons explorer la syntaxe de base et les options les plus courantes pour que vous puissiez rapidement lancer vos premiers conteneurs.
Syntaxe de base et premiers lancements
La structure générale de la commande est la suivante :
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]Décortiquons cela :
- [OPTIONS] : Ce sont les différents paramètres qui modifient le comportement par défaut (ex: `-d` pour détacher, `-p` pour les ports).
- IMAGE[:TAG|@DIGEST] : Le nom de l'image à utiliser, suivi éventuellement d'un tag spécifique (comme `nginx:1.21`) ou d'un digest (identifiant unique et immuable de l'image). Si aucun tag n'est spécifié, `:latest` est utilisé par défaut.
- [COMMAND] [ARG...] : Optionnellement, vous pouvez spécifier une commande à exécuter à l'intérieur du conteneur, qui remplacera la commande par défaut définie dans le Dockerfile de l'image (via l'instruction `CMD` ou `ENTRYPOINT`).
Commençons par l'exemple le plus simple, celui que vous avez peut-être déjà utilisé pour vérifier votre installation :
docker run hello-worldCette commande télécharge (si nécessaire) l'image `hello-world` et exécute le programme qu'elle contient. Ce programme affiche un message de bienvenue et d'information, puis le conteneur s'arrête immédiatement car sa tâche principale est terminée. Par défaut, `docker run` s'exécute en mode "foreground" (premier plan) : votre terminal est attaché au processus principal du conteneur.
Vous pouvez aussi exécuter une commande spécifique dans un conteneur basé sur une image de système d'exploitation, par exemple :
docker run ubuntu echo "Bonjour depuis un conteneur Ubuntu !"Ici, Docker crée un conteneur à partir de l'image `ubuntu`, exécute la commande `echo "Bonjour..."` à l'intérieur, affiche la sortie sur votre terminal, puis le conteneur s'arrête.
Options clés pour un contrôle accru
Pour rendre `docker run` vraiment puissant, vous utiliserez fréquemment ses options. Voici quelques-unes des plus indispensables :
- `-d` ou `--detach` : Exécute le conteneur en arrière-plan (mode détaché). Votre terminal vous rend la main immédiatement, et le conteneur continue de tourner. C'est essentiel pour les services de longue durée comme les serveurs web ou les bases de données. Docker affiche l'identifiant long du conteneur démarré.
# Lance Nginx en arrière-plan docker run -d nginx - `-p HOTE:CONTENEUR` ou `--publish HOTE:CONTENEUR` : Publie un port du conteneur sur un port de votre machine hôte. Cela permet d'accéder aux services tournant dans le conteneur depuis l'extérieur. La syntaxe est `PORT_HOTE:PORT_CONTENEUR`.
Vous pourrez alors accéder à Nginx via `http://localhost:8080` dans votre navigateur.# 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 nginx - `--name NOM_CONTENEUR` : Attribue un nom spécifique et lisible à votre conteneur. C'est beaucoup plus pratique que de manipuler les longs identifiants générés automatiquement. Les noms doivent être uniques.
# Lance Nginx avec un nom personnalisé docker run -d -p 8080:80 --name mon_nginx nginx - `-i` ou `--interactive` : Garde `STDIN` ouvert même si non attaché. Souvent utilisé avec `-t`.
- `-t` ou `--tty` : Alloue un pseudo-TTY (terminal). Indispensable pour obtenir un shell interactif.
- `-it` (combinaison de `-i` et `-t`) : Permet d'ouvrir une session de terminal interactive à l'intérieur du conteneur. Très utile pour explorer le système de fichiers du conteneur, déboguer ou exécuter des commandes manuellement.
Votre invite de commande changera pour celle du conteneur (par exemple, `root@abcdef123456:/#`). Tapez `exit` pour quitter le shell et arrêter le conteneur.# Lance un shell bash interactif dans un conteneur Ubuntu docker run -it ubuntu bash - `--rm` : Supprime automatiquement le conteneur lorsque celui-ci s'arrête. Pratique pour les tâches ponctuelles ou les conteneurs interactifs que vous ne souhaitez pas conserver après utilisation.
# Lance un conteneur temporaire pour voir la version de Python docker run --rm python:3.9 python --version
Ces options peuvent bien sûr être combinées. Par exemple, pour lancer un serveur Nginx nommé `web_prod` en arrière-plan, mappant le port 80 et qui sera automatiquement supprimé à l'arrêt :
docker run -d -p 80:80 --name web_prod --rm nginxPoints à retenir et bonnes pratiques
La commande `docker run` est votre outil principal pour interagir avec les images et lancer des conteneurs. Retenez qu'elle crée et démarre un conteneur en une seule étape, et qu'elle peut télécharger l'image si besoin.
Pensez toujours à spécifier un tag d'image précis (`IMAGE:TAG`) pour assurer la cohérence et la reproductibilité de vos environnements, plutôt que de vous fier au tag `:latest` implicite.
Utilisez l'option `--name` pour donner des noms significatifs à vos conteneurs, ce qui facilitera grandement leur gestion ultérieure (arrêt, redémarrage, inspection des logs, etc.) avec d'autres commandes Docker comme `docker stop`, `docker start`, `docker logs`.
Lorsque vous lancez un service en arrière-plan avec `-d`, utilisez `docker ps` pour vérifier qu'il est bien en cours d'exécution et pour voir le mapping des ports.
L'option `--rm` est très utile pour les expérimentations rapides ou les tâches uniques, car elle évite d'accumuler des conteneurs arrêtés qui consomment inutilement de l'espace disque. N'oubliez pas qu'un conteneur arrêté existe toujours et peut être redémarré (`docker start`) s'il n'a pas été lancé avec `--rm`.
En maîtrisant `docker run` et ses options fondamentales, vous avez franchi une étape majeure dans votre apprentissage de Docker. Vous êtes maintenant capable de lancer une grande variété d'applications et de services conteneurisés à partir des images disponibles sur Docker Hub.