OS de votre poste :
Parcours Linux · Bash (.sh)
Module 05 · Docker DevOps · TP 09

TP-09 — Déployer une application et sa base avec Compose

À mesure que les services se multiplient, les commandes de démarrage et leur configuration deviennent difficiles à maintenir. Vous décrirez l’application et MariaDB avec Compose, vérifierez leurs échanges et leur persistance, puis distinguerez une panne de base de données de l’état de santé de l’API.

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

Si vous êtes déjà connecté avec student, conserver cette session.

Dépendances

Configuration pour Linux

Utiliser le moteur préparé par le guide commun :

Terminal Linux

docker version
docker compose version

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

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

Si 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 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.0

Observer 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 .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 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 --services

Observer 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/tasks

Observer 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 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/tasks

Observer 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/tasks

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

Retour au module · Documentation Docker

Nettoyage

Dépendances

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