Docker Leçon 2
Lancer et gérer des conteneurs
Faire tourner un serveur web en arrière-plan, publier un port, lire son journal, l'arrêter et le supprimer.
À la fin de cette leçon, tu sauras
- Lancer un conteneur en arrière-plan avec un nom et un port
- Lire son journal et y lancer des commandes
- Arrêter, redémarrer et supprimer des conteneurs
Un serveur web en une ligne
docker run -d --name web -p 8080:80 nginx-d(detach) : en arrière-plan ; sans lui, ton terminal reste bloqué sur les messages du serveur ;--name web: un nom à toi, plus pratique quebrave_turingchoisi au hasard par Docker ;-p 8080:80: le port 8080 de la machine est relié au port 80 du conteneur. Toujours dans cet ordre :machine:conteneur.
Le site répond maintenant sur http://adresse-du-serveur:8080. Deux conteneurs ne peuvent pas utiliser le même port de la machine, mais ils peuvent tous les deux écouter sur le port 80 à l'intérieur de leur boîte.
Attention : un port publié par Docker est ouvert sur Internet, même si le pare-feu ufw le bloque : Docker passe avant. Pour un conteneur que seul le serveur doit voir (une base de données, un site derrière Caddy ou nginx), publie-le sur l'adresse locale : -p 127.0.0.1:8080:80.
Le cycle de vie
docker ps # en marche
docker logs web # le journal du conteneur (ajoute -f pour le suivre en direct)
docker exec web nginx -v # lance une commande DANS le conteneur
docker stop web # arrête (le conteneur existe toujours)
docker start web # le relance
docker restart web
docker rm web # supprime (il doit être arrêté)
docker rm -f web # arrête et supprime d'un coupAstuce : docker exec -it web sh ouvre un terminal dans le conteneur, pour fouiller. Ce terminal simulé ne le permet pas : lance plutôt des commandes précises, comme docker exec web ls /usr/share/nginx/html.
Un conteneur est jetable : on le supprime et on le recrée sans regret. Tout ce qui a été écrit à l'intérieur disparaît avec lui… sauf si on a prévu un volume (leçon 4).
À retenir
docker run -d --name web -p 8080:80 nginx: arrière-plan, nom, port machine:conteneur.- Un port de la machine ne sert qu'à un conteneur à la fois.
- Les ports publiés par Docker passent avant ufw :
-p 127.0.0.1:8080:80pour rester local. docker logs,docker exec,docker stop / start / restart,docker rm(ourm -f).- Un conteneur est jetable : ce qui est écrit dedans disparaît avec lui.
Voir la fiche de révision de cette leçon (à imprimer ou à relire avant un contrôle)
Exercice 1 · Ton premier serveur web
Facile ✓ Réussi- lance en arrière-plan un conteneur
nginxnomméweb, joignable sur le port8080de la machine ; - vérifie qu'il est en marche ;
- affiche son journal ;
- demande-lui sa version de nginx avec
docker exec.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : Le conteneur web tourne avec l'image nginx
- À faire : Le port 8080 de la machine va vers le port 80 du conteneur
- À faire : Il est lancé en arrière-plan (-d)
- À faire : Les conteneurs en marche sont listés
- À faire : Le journal est affiché
- À faire : La version est demandée dans le conteneur
Bravo, cet exercice est réussi !
- Indice 1 : Les options vont avant le nom de l'image :
docker run -d --name web -p … nginx. - Indice 2 : Le port :
-p 8080:80(machine:conteneur). - Indice 3 :
docker ps,docker logs web, puisdocker exec web nginx -v.
Toujours bloqué ? Voir une solution
docker run -d --name web -p 8080:80 nginx
docker ps
docker logs web
docker exec web nginx -v Exercice 2 · Le port est déjà pris
Moyen ✓ RéussiLe conteneur web tourne déjà sur le port 8080. Tu veux tester le serveur httpd (Apache) à côté.
- lance un conteneur
httpdnomméapachesur le port8080… et lis l'erreur ; - relance-le sur le port
8081de la machine (l'essai raté a laissé un conteneurapache? vérifie avecdocker ps -a) ; - le test est concluant : arrête puis supprime l'ancien conteneur
web.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : Le conteneur apache tourne avec httpd
- À faire : Il répond sur le port 8081 de la machine
- À faire : Le conteneur web est supprimé
- À faire : web est arrêté avant d'être supprimé
Bravo, cet exercice est réussi !
- Indice 1 : Le premier essai :
docker run -d --name apache -p 8080:80 httpd→ « port is already allocated ». - Indice 2 : Le même, avec
-p 8081:80. Dans ce terminal, l'essai raté n'a pas laissé de conteneur ; sur un vrai serveur, il faut parfoisdocker rm apached'abord. - Indice 3 : Pour finir :
docker stop webpuisdocker rm web.
Toujours bloqué ? Voir une solution
# état du serveur (ne pas modifier)
docker run -d --name web -p 8080:80 nginx
# à toi :
docker run -d --name apache -p 8080:80 httpd
docker ps -a
docker run -d --name apache -p 8081:80 httpd
docker stop web
docker rm web