Cours RechercherCtrl K

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.

25 min

À 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 que brave_turing choisi 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 coup

Astuce : 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:80 pour rester local.
  • docker logs, docker exec, docker stop / start / restart, docker rm (ou rm -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
  1. lance en arrière-plan un conteneur nginx nommé web, joignable sur le port 8080 de la machine ;
  2. vérifie qu'il est en marche ;
  3. affiche son journal ;
  4. demande-lui sa version de nginx avec docker exec.
commandes.sh
eleve@cours: ~

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
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

Le conteneur web tourne déjà sur le port 8080. Tu veux tester le serveur httpd (Apache) à côté.

  1. lance un conteneur httpd nommé apache sur le port 8080… et lis l'erreur ;
  2. relance-le sur le port 8081 de la machine (l'essai raté a laissé un conteneur apache ? vérifie avec docker ps -a) ;
  3. le test est concluant : arrête puis supprime l'ancien conteneur web.
commandes.sh
eleve@cours: ~

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é
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

Quiz

1Dans -p 8080:80, que représente 8080 ?
2Que fait docker stop web ?
3Comment publier un port seulement pour le serveur lui-même ?