Objectifs et cours associés
Déployer une application et sa base avec Compose, puis contrôler leur fonctionnement et leurs données.
Pour réviser les notions utilisées dans ce TP :
Préparation
Prérequis
Configuration pour Windows
Guide : Préparer Docker pour les TP
Les commandes se feront directement depuis un terminal PowerShell.
Configuration pour Linux
Compte student, membre de devops, avec accès sudo ; terminal Linux et systemd.
Guide : Préparer Linux pour les TP
Moteur Docker et Compose disponibles.
Guide : Préparer Docker pour les TP
Dans le terminal Linux, entrer dans student si nécessaire :
Terminal Linux
su - studentSi vous êtes déjà connecté avec student, conserver cette session.
Dépendances
Configuration pour Windows
Ouvrir Docker Desktop depuis le menu Démarrer et attendre que le moteur fonctionne, en mode conteneurs Linux.
Terminal Windows — PowerShell
docker version
docker compose versiondocker version doit afficher Client et Server. Si Server est indisponible, attendre le démarrage du moteur ou corriger Docker Desktop avant de poursuivre. Utiliser PowerShell 7.4 ou ultérieur pour les scripts .ps1 fournis.
Ressources et point de départ
Télécharger les archives ci-dessous, puis les copier et les extraire avec les commandes fournies.
Copier et extraire les archives téléchargées :
Terminal Windows — PowerShell
mkdir "$env:USERPROFILE/devops-formation/tp-05-09" -Force
cd "$env:USERPROFILE/devops-formation/tp-05-09"
cp "$env:USERPROFILE/Downloads/tp-09.zip" . -Force
Expand-Archive ./tp-09.zip -DestinationPath . -Force
mkdir "$env:USERPROFILE/devops-formation/tp-05-08" -Force
cd "$env:USERPROFILE/devops-formation/tp-05-08"
mkdir "$env:USERPROFILE/devops-formation/tp-05-03" -Force
cd "$env:USERPROFILE/devops-formation/tp-05-03"
cp "$env:USERPROFILE/Downloads/todo-list-sources.zip" . -Force
Expand-Archive ./todo-list-sources.zip -DestinationPath . -Force
cd "$env:USERPROFILE/devops-formation/tp-05-09"
ls -ForceLire les fichiers du TP
Avec Visual Studio Code et la commande code disponibles, ouvrez le dossier préparé ci-dessus :
Terminal Windows — PowerShell
cd "$env:USERPROFILE/devops-formation/tp-05-09"
code .Dans VS Code, lisez compose.yaml et .env.example.
Repérez les services app et db, leurs images, le volume de données, les secrets et le port publié.
Configuration pour Linux
Utiliser le moteur préparé par le guide commun :
Terminal Linux
docker version
docker compose versionClient et Server doivent être disponibles. Les services applicatifs seront lancés par les commandes du TP ; ne pas installer les serveurs web ou bases de données sur le poste.
Ressources et point de départ
Télécharger les archives ci-dessous, puis les copier et les extraire avec les commandes fournies.
Copier et extraire les archives téléchargées (avec unzip installé) :
Terminal Linux — Bash
mkdir -p ~/devops-formation/tp-05-09
cd ~/devops-formation/tp-05-09
cp ~/Downloads/tp-09.zip .
unzip -o ./tp-09.zip -d .
mkdir -p ~/devops-formation/tp-05-08
cd ~/devops-formation/tp-05-08
mkdir -p ~/devops-formation/tp-05-03
cd ~/devops-formation/tp-05-03
cp ~/Downloads/todo-list-sources.zip .
unzip -o ./todo-list-sources.zip -d .
cd ~/devops-formation/tp-05-09
ls -aLire les fichiers du TP
Avec Visual Studio Code et la commande code disponibles, ouvrez le dossier préparé ci-dessus :
Terminal Linux — Bash
cd ~/devops-formation/tp-05-09
code .Dans VS Code, lisez compose.yaml et .env.example.
Repérez les services app et db, leurs images, le volume de données, les secrets et le port publié.
Étape 1 : Rendre l’image disponible indépendamment
Avec le compte de travail, créer le dossier du TP puis s’y placer :
Terminal Windows — PowerShell
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir "$env:USERPROFILE/devops-formation/tp-05-09"
# Se placer dans le dossier requis pour les commandes suivantes.
cd "$env:USERPROFILE/devops-formation/tp-05-09"Avec le compte de travail, créer le dossier du TP puis s’y placer :
Terminal Linux
# Créer le dossier indiqué pour les fichiers de travail du TP.
mkdir -p ~/devops-formation/tp-05-09
# Se placer dans le dossier requis pour les commandes suivantes.
cd ~/devops-formation/tp-05-09Si l’image asd-todo:1.0 est absente, construisez-la en suivant le TP-03, puis revenez ici.
L’archive initiale docker load n’est pas encore fournie dans cette alpha.
Pour la voie registre, connectez Docker au registre préparé dans le TP-08, puis publiez et récupérez l’image avec les commandes suivantes.
Le nom du registre est relu depuis tp-05-08/state/registry-host.
Commandes selon votre OS
Terminal Windows — PowerShell
# Définir la valeur réutilisée par les commandes suivantes pour le nom ou l’adresse du registre.
$registry_host = (cat "$env:USERPROFILE/devops-formation/tp-05-08/state/registry-host").Trim()
# Authentifier le client auprès du registre pour les opérations suivantes.
docker login ${registry_host}:5443
# Ajouter une référence à l’image, notamment le nom du registre de destination.
docker tag asd-todo:1.0 ${registry_host}:5443/asd/todo:1.0
# Publier l’image dans le registre désigné par son tag.
docker push ${registry_host}:5443/asd/todo:1.0
# Supprimer uniquement la référence d’image indiquée.
docker image rm ${registry_host}:5443/asd/todo:1.0
# Télécharger l’image depuis le registre.
docker pull ${registry_host}:5443/asd/todo:1.0Terminal Linux — Bash
# Définir la valeur réutilisée par les commandes suivantes pour le nom ou l’adresse du registre.
registry_host=$(cat ~/devops-formation/tp-05-08/state/registry-host)
# Authentifier le client auprès du registre pour les opérations suivantes.
docker login ${registry_host}:5443
# Ajouter une référence à l’image, notamment le nom du registre de destination.
docker tag asd-todo:1.0 ${registry_host}:5443/asd/todo:1.0
# Publier l’image dans le registre désigné par son tag.
docker push ${registry_host}:5443/asd/todo:1.0
# Supprimer uniquement la référence d’image indiquée.
docker image rm ${registry_host}:5443/asd/todo:1.0
# Télécharger l’image depuis le registre.
docker pull ${registry_host}:5443/asd/todo:1.0Observer avant de poursuivre : Le TP Compose n’a aucun build implicite. Une image locale déjà construite suffit aussi ; choisir sa référence dans .env.
Étape 2 : Préparer et valider le projet
Dans .env, utilisez le nom du registre enregistré dans tp-05-08/state/registry-host pour les images publiées : TODO_IMAGE=NOM_DU_REGISTRE:5443/asd/todo:1.0. Remplacez NOM_DU_REGISTRE par ce nom réel, ou par localhost si vous avez choisi le certificat local.
Depuis le dossier du TP-09 préparé ci-dessus, Le script prepare-project.ps1 crée les secrets et le dossier logs pour Docker Desktop, en conservant les secrets existants.
Depuis le dossier du TP-09 préparé ci-dessus, Le script .sh crée des secrets aléatoires et règle les droits POSIX du dossier logs. Il conserve les secrets existants.
Commandes selon votre OS
Terminal Windows — PowerShell
# Préparer les fichiers et paramètres du projet avec le script fourni.
./prepare-project.ps1
# Copier le fichier vers l’emplacement où il sera utilisé.
cp .env.example .env
# Dans .env, remplacer le nom du registre par celui de state/registry-host : TODO_IMAGE=NOM_DU_REGISTRE:5443/asd/todo:1.0
docker compose config --quiet
# Valider et afficher la configuration Compose résolue avant le démarrage.
docker compose config --servicesTerminal Linux — Bash
# Préparer les fichiers et paramètres du projet avec le script fourni.
bash prepare-project.sh
# Copier le fichier vers l’emplacement où il sera utilisé.
cp .env.example .env
# Dans .env, remplacer le nom du registre par celui de state/registry-host : TODO_IMAGE=NOM_DU_REGISTRE:5443/asd/todo:1.0
docker compose config --quiet
# Valider et afficher la configuration Compose résolue avant le démarrage.
docker compose config --servicesObserver avant de poursuivre : Services app/db, réseau back, volume db_data et bind ./logs. Seule app publie un port. Les secrets locaux sont des fichiers montés, pas un coffre-fort chiffré. Ne pas publier secrets ni .env.
Étape 3 : Démarrer et vérifier les trois niveaux
depends_on attend le healthcheck initial de la base ; il ne garantit pas sa disponibilité future.
Commandes selon votre OS
Terminal — PowerShell (Windows) ou Bash (Linux)
# Créer ou mettre à jour les services et les démarrer avec la configuration du projet.
docker compose up -d
# Contrôler l’état des services du projet Compose.
docker compose ps
# Consulter les sorties des services pour repérer la cause d’un problème.
docker compose logs --tail 20 app db
# Interroger le point de santé et observer le code HTTP retourné.
curl -f http://127.0.0.1:8090/healthz
# Tester une opération de l’API et observer sa réponse métier ou son erreur HTTP.
curl -f http://127.0.0.1:8090/api/tasks
# Tester une opération de l’API et observer sa réponse métier ou son erreur HTTP.
curl -f -H 'Content-Type: application/json' -d '{"title":"Conserver apres recreation"}' http://127.0.0.1:8090/api/tasksObserver avant de poursuivre : Attendre healthy si nécessaire. Vérifier séparément santé MariaDB, santé API, puis CRUD. Ouvrir le navigateur sur 127.0.0.1:8090, cocher et supprimer une tâche de test ; conserver une tâche témoin.
Étape 4 : Observer et retrouver les données
Les ports et volumes sont attachés au projet asd-tp09. Le volume réel porte normalement le préfixe de projet, par exemple asd-tp09_db_data.
Commandes selon votre OS
Terminal Windows — PowerShell
# Exécuter la vérification dans le service Compose ciblé.
docker compose exec app dotnet Todo.dll --healthcheck
# Lire le fichier pour vérifier son contenu.
cat -Tail 8 logs/requests.jsonl
# Supprimer les conteneurs et le réseau du projet ; les volumes sont conservés sans option de suppression.
docker compose down
# Créer ou mettre à jour les services et les démarrer avec la configuration du projet.
docker compose up -d
# Contrôler l’état des services du projet Compose.
docker compose ps
# Tester une opération de l’API et observer sa réponse métier ou son erreur HTTP.
curl -f http://127.0.0.1:8090/api/tasksTerminal Linux — Bash
# Exécuter la vérification dans le service Compose ciblé.
docker compose exec app dotnet Todo.dll --healthcheck
# Lire les journaux pour relier la requête ou la panne aux messages du service.
sudo tail -n 8 logs/requests.jsonl
# Supprimer les conteneurs et le réseau du projet ; les volumes sont conservés sans option de suppression.
docker compose down
# Créer ou mettre à jour les services et les démarrer avec la configuration du projet.
docker compose up -d
# Contrôler l’état des services du projet Compose.
docker compose ps
# Tester une opération de l’API et observer sa réponse métier ou son erreur HTTP.
curl -f http://127.0.0.1:8090/api/tasksObserver avant de poursuivre : Après disponibilité de la base, la tâche témoin est toujours présente. Le fichier de logs existe encore. down supprime les conteneurs/réseaux du projet mais conserve le volume nommé.
Étape 5 : Distinguer panne de base et santé API
Ne pas effacer les données pour diagnostiquer une indisponibilité.
Commandes selon votre OS
Terminal — PowerShell (Windows) ou Bash (Linux)
# Arrêter les services sans supprimer leurs conteneurs ni leurs volumes.
docker compose stop db
# Interroger le point de santé et observer le code HTTP retourné.
curl -f http://127.0.0.1:8090/healthz
# Tester une opération de l’API et observer sa réponse métier ou son erreur HTTP.
curl -i http://127.0.0.1:8090/api/tasks
# Consulter les sorties des services pour repérer la cause d’un problème.
docker compose logs --tail 15 app
# Redémarrer les conteneurs déjà créés pour le projet.
docker compose start db
# Attendre healthy, puis :
curl -f http://127.0.0.1:8090/api/tasksObserver avant de poursuivre : Healthz=200, CRUD=503 durant la panne, retour métier après redémarrage. Un secret modifié dans un fichier ne réinitialise pas le mot de passe d’un volume MariaDB déjà initialisé.
Vérification finale
- Base healthy, API healthy et CRUD confirmé.
- Tâche témoin retrouvée après down/up.
- Journaux stdout et fichiers présents.
Retenir
Réponses aux trois repères du TP
- Service db devient le nom interne du serveur MariaDB.
- Un healthcheck initial n’est pas une garantie continue.
- down --volumes détruit volontairement les données du projet.
Nettoyage
Dépendances
Configuration pour Windows
Dans PowerShell, avec Docker Desktop démarré, exécutez le nettoyage suivant.
Nettoyage ciblé et reprise
Commandes selon votre OS
docker compose down
# Seulement si la perte des données est voulue :
# docker compose down --volumes
# Le bind logs et les secrets ne sont pas supprimés par down --volumes.Vos fichiers restent dans $env:USERPROFILE/devops-formation/tp-05-09.
Supprimez uniquement les ressources nommées dans les commandes de ce TP. Le volume de données de MariaDB, les fichiers secrets et le dossier logs sont conservés pour reprendre le projet.
Conservez Docker pour les TP suivants.
Configuration pour Linux
Linux : exécuter le nettoyage ciblé dans le terminal relié au Docker Engine natif du TP. Ne pas toucher aux ressources d’un autre contexte.
Nettoyage ciblé et reprise
Commandes selon votre OS
docker compose down
# Seulement si la perte des données est voulue :
# docker compose down --volumes
# Le bind logs et les secrets ne sont pas supprimés par down --volumes.Vos fichiers restent dans ~/devops-formation/tp-05-09.
Supprimez uniquement les ressources nommées dans les commandes de ce TP. Le volume de données de MariaDB, les fichiers secrets et le dossier logs sont conservés pour reprendre le projet.
Conservez Docker pour les TP suivants.
Prérequis
Configuration pour Windows
Conserver Docker Desktop et les dossiers de travail Windows pour les TP suivants. Sauvegarder vos travaux avant tout retrait facultatif.
Conserver le moteur Docker pour la suite.
Guide : Préparer Docker pour les TP
Fermer Terminal Windows lorsque les commandes sont terminées. Docker Desktop reste disponible pour les autres TP.
Configuration pour Linux
Conserver student, devops et l’environnement pour les TP suivants. Le retrait complet reste facultatif, après nettoyage des dépendances et sauvegarde des travaux.
Guide : Préparer Linux pour les TP
Conserver le moteur Docker pour la suite.
Guide : Préparer Docker pour les TP
exit quitte la session student et revient au compte initial si vous avez utilisé su - student. Le système Linux du poste reste installé.