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.
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-stoppedpartout. - Derrière un proxy (Caddy, nginx), on publie sur
127.0.0.1seulement. - Faire le ménage :
docker rmles 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
✓ Réussi- crée le réseau
blog-reseauet le volumeblog-base; - lance la base : conteneur
blog-db, imagemariadb:11, sur le réseau, avecMARIADB_ROOT_PASSWORD, le volume branché sur/var/lib/mysql, redémarrageunless-stopped, sans port publié ; - arrête et supprime l'ancien conteneur
ancien(il occupe le port 8080) ; - lance le site : conteneur
blog-web, imagenginx:alpine, sur le réseau, qui sert~/blogen lecture seule à la place de/usr/share/nginx/html, publié seulement en local sur127.0.0.1:8080(Caddy fera le lien avec Internet), redémarrageunless-stopped; - supprime les images qu'aucun conteneur n'utilise plus, puis affiche les conteneurs en marche.
commandes.sh
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
Bravo, toutes les consignes sont réussies !
- Indice 1 :
docker network create blog-reseau,docker volume create blog-base, puisdocker run -d --name blog-db --network blog-reseau -e MARIADB_ROOT_PASSWORD=… -v blog-base:/var/lib/mysql --restart unless-stopped mariadb:11. - Indice 2 :
docker stop ancienetdocker rm ancienlibèrent le port 8080. - Indice 3 : Le site :
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, puisdocker image prune -aetdocker ps.
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 Défi réussi !
Ton badge Docker passe en or dès que toutes les leçons du cours sont terminées. Retrouve tes badges sur la page d'accueil.