Cours RechercherCtrl K

Docker Défi final

Déménager un site dans Docker

Réseau, base avec volume, site en lecture seule derrière un proxy, ménage : un vrai déploiement.

30 min

Ce défi reprend tout le cours. Le blog tourne aujourd'hui dans un vieux conteneur ancien ; tu le remplaces par une installation propre, prête pour la production.

À retenir

  • Un réseau par application ; la base sans port publié, joignable par son nom.
  • Les données dans un volume, le site en lecture seule, --restart unless-stopped partout.
  • Derrière un proxy (Caddy, nginx), on publie sur 127.0.0.1 seulement.
  • Faire le ménage : docker rm les vieux conteneurs, docker image prune -a.

Voir la fiche de révision de cette leçon (à imprimer ou à relire avant un contrôle)

Le défi · Le blog, version propre

  1. crée le réseau blog-reseau et le volume blog-base ;
  2. lance la base : conteneur blog-db, image mariadb:11, sur le réseau, avec MARIADB_ROOT_PASSWORD, le volume branché sur /var/lib/mysql, redémarrage unless-stopped, sans port publié ;
  3. arrête et supprime l'ancien conteneur ancien (il occupe le port 8080) ;
  4. lance le site : conteneur blog-web, image nginx:alpine, sur le réseau, qui sert ~/blog en lecture seule à la place de /usr/share/nginx/html, publié seulement en local sur 127.0.0.1:8080 (Caddy fera le lien avec Internet), redémarrage unless-stopped ;
  5. supprime les images qu'aucun conteneur n'utilise plus, puis affiche les conteneurs en marche.
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 réseau blog-reseau existe
  • À faire : Le volume blog-base existe
  • À faire : blog-db tourne (mariadb:11, sur le réseau)
  • À faire : Les données de la base sont dans le volume
  • À faire : La base redémarre toute seule
  • À faire : La base n'a pas de port publié
  • À faire : L'ancien conteneur est supprimé
  • À faire : blog-web tourne (nginx:alpine, sur le réseau)
  • À faire : ~/blog est servi en lecture seule
  • À faire : Publié seulement en local sur 127.0.0.1:8080
  • À faire : Le site redémarre tout seul
  • À faire : Les images inutilisées sont supprimées
  • À faire : Les conteneurs en marche sont affichés à la fin
Toujours bloqué ? Voir une solution
# état du serveur (ne pas modifier)
docker run -d --name ancien -p 8080:80 httpd:2.4

# à toi :
docker network create blog-reseau
docker volume create blog-base
docker run -d --name blog-db --network blog-reseau -e MARIADB_ROOT_PASSWORD=Un-Mot-De-Passe-Solide -v blog-base:/var/lib/mysql --restart unless-stopped mariadb:11
docker stop ancien
docker rm ancien
docker run -d --name blog-web --network blog-reseau -p 127.0.0.1:8080:80 -v ~/blog:/usr/share/nginx/html:ro --restart unless-stopped nginx:alpine
docker image prune -a
docker ps