Épisode 03 / 9Les gestes essentiels25 min
Lancer son premier conteneur
Un vrai serveur Web qui tourne dans un conteneur, ouvert dans votre navigateur, observé, arrêté puis supprimé proprement.
Tapez les commandes dans PowerShell, avec Docker Desktop démarré : « Engine running » en bas à gauche.
Ajoutez sudo devant chaque commande docker, sauf si vous avez choisi le groupe docker à l’épisode 2.
Dans cet épisode
- Lancer un serveur Web dans un conteneur et l’ouvrir dans votre navigateur
- Observer un conteneur : état, journaux, consommation
- Distinguer arrêter, redémarrer et supprimer
hello-world s’est lancé, a parlé, puis s’est arrêté aussitôt. Cette fois, on
lance un conteneur qui reste en marche : un serveur Web, Nginx.
Pourquoi Nginx ? Parce qu’il est petit, officiel et très répandu, et qu’il donne un résultat visible tout de suite, dans votre navigateur. On ne construit pas encore de site : Nginx sert de cobaye pour apprendre les gestes de base, sans rien installer directement sur votre système.
Étape 1 : lancer Nginx
C’est la commande décortiquée à l’épisode 1 :
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx:alpine
L’image n’est pas encore sur votre machine : Docker la télécharge, puis affiche une longue suite de chiffres et de lettres. C’est l’identifiant du conteneur, qui tourne désormais en arrière-plan.
Ouvrez http://127.0.0.1:8080 : la page « Welcome to
nginx! » s’affiche. 127.0.0.1, que l’on écrit aussi localhost, est
l’adresse de votre propre ordinateur, vue de l’intérieur.
Ouvrez Containers dans Docker Desktop : web-demo y apparaît, avec son port
8080:80 cliquable. Docker Desktop sait aussi lancer une image sans terminal
(Images, bouton Run, puis Optional settings), mais cette méthode
peut ouvrir le port à tout votre réseau local. La commande, elle, le garde sur
votre PC.
Étape 2 : observer avant d’agir
Un bon diagnostic commence toujours par regarder. Ces commandes ne modifient rien :
docker ps
docker logs web-demo
docker stats --no-stream web-demo
docker inspect web-demo
| Commande | Ce qu’elle montre |
|---|---|
docker ps | Les conteneurs en cours, leur état et leurs ports |
docker logs web-demo | Ce que l’application a écrit : ici, une ligne par visite |
docker stats --no-stream web-demo | Un instantané du processeur et de la mémoire utilisés |
docker inspect web-demo | Toute sa configuration, en détail (c’est long, c’est normal) |
Petite expérience : actualisez la page Nginx deux ou trois fois, puis relancez
docker logs web-demo. Une nouvelle ligne apparaît à chaque visite. Les
journaux sont la première chose à lire quand un conteneur se comporte mal.
Dans Docker Desktop, cliquez sur web-demo : les onglets Logs, Inspect
et Stats montrent les mêmes informations. Les intitulés peuvent varier
légèrement d’une version à l’autre.
Étape 3 : arrêter, relancer, supprimer
Arrêtez le conteneur, constatez qu’il existe toujours, puis relancez-le :
docker stop web-demo
docker ps -a
docker start web-demo
Après docker stop, la page ne répond plus et docker ps ne montre plus rien.
Mais docker ps -a affiche web-demo à l’état Exited : il est arrêté, pas
supprimé. docker start le relance avec exactement le même nom et le même port.
Quand l’essai est fini, arrêtez-le puis supprimez-le :
docker stop web-demo
docker rm web-demo
docker image ls nginx
La dernière commande le prouve : l’image nginx:alpine est toujours là, prête
pour le prochain lancement, qui ne demandera aucun téléchargement. Gardez-la,
les épisodes suivants s’en servent.
docker rm -f web-demo fait les deux d’un coup, arrêt et suppression. C’est
pratique pour un conteneur d’essai, mais sur un vrai service, l’arrêt en deux
temps laisse à l’application le temps de se fermer proprement.
Testez-vous
3 questions pour vérifier que l’essentiel est acquis. Rien n’est noté ni enregistré.
Quelle est la différence entre docker stop et docker rm ?
Un conteneur arrêté existe toujours, avec son nom et ses réglages : docker start le relance tel quel. Seul docker rm le fait disparaître — et jamais l’image.
docker ps ne montre pas votre conteneur. Où regarder ?
docker ps ne liste que les conteneurs en cours. Avec -a, vous voyez aussi ceux qui se sont arrêtés, et docker logs vous dit pourquoi.
Pourquoi écrire -p 127.0.0.1:8080:80 plutôt que -p 8080:80 ?
Sans adresse, Docker ouvre le port sur toutes les interfaces : n’importe quel appareil du réseau peut s’y connecter. Pour un essai, 127.0.0.1 garde la porte à l’intérieur.
Vérifier que tout fonctionne
Cochez au fur et à mesure : quand tout est coché, vous pouvez passer à la suite.
Problèmes courants
« port is already allocated » ou « address already in use »
Un autre programme, ou un conteneur oublié, occupe déjà le port 8080 de votre ordinateur. Changez seulement le nombre de gauche : -p 127.0.0.1:8081:80, puis ouvrez http://127.0.0.1:8081. Le 80 de droite ne bouge pas : c’est la porte de Nginx, dans le conteneur.
« The container name "/web-demo" is already in use »
Un conteneur de ce nom existe encore, sans doute d’un essai précédent. Vérifiez avec docker ps -a, puis retirez-le avec docker rm -f web-demo s’il s’agit bien du vôtre.
La page ne s’affiche pas dans le navigateur
Lancez docker ps. Si web-demo n’apparaît pas, il s’est arrêté : docker ps -a et docker logs web-demo diront pourquoi. S’il apparaît, vérifiez la colonne PORTS (127.0.0.1:8080->80/tcp) et l’adresse tapée dans le navigateur.
Un forum conseille d’ajouter --privileged pour que ça marche
Ne le faites pas. Cette option donne au conteneur un accès presque total à votre machine. Aucun exercice de cette formation n’en a besoin, et ce n’est jamais une solution de dépannage.
Votre progression reste sur cet appareil, rien n’est envoyé.