DOCKER - 5 4 Exercice Volume nom

Cet exercice vous propose un scénario réaliste : mettre à jour une base de données PostgreSQL sans perdre les données. Dans une architecture classique, on mettrait à jour le logiciel via le gestionnaire de paquets. Avec Docker, vous devez remplacer le conteneur par une nouvelle version, mais les données doivent persister. C'est le rôle des volumes nommés.

Vous créerez d'abord un conteneur PostgreSQL version 9.6.1 avec un volume nommé. Pour cela, consultez la documentation Docker Hub du répo officiel PostgreSQL : identifiez le chemin du volume à l'intérieur du conteneur (par exemple /var/lib/postgresql/data), puis créez le conteneur avec docker run -v nom-volume:/var/lib/postgresql/data .... Vérifiez ensuite les logs pour voir quand la base se termine d'initialiser.

Arrêtez ce conteneur, puis démarrez-en un nouveau avec une version plus récente (par exemple PostgreSQL 13) en spécifiant le même volume nommé. Lors du second démarrage, les logs sont beaucoup plus courts car PostgreSQL n'a pas à recréer la base : il la trouve déjà sur le volume. Vous pouvez vérifier le volume avec docker volume ls.

C'est ainsi qu'on gère les mises à jour de production : les données survivent au remplacement du conteneur. Attention : les mises à jour majeures (PostgreSQL 9 vers 12) nécessitent généralement des outils de migration spécifiques. Cet exercice couvre les mises à jour de patch, qui ne modifient pas le schéma.

En résumé

Cet exercice aborde la gestion des données persistantes dans Docker à travers le cas d'usage réaliste de la mise à jour de versions de bases de données. L'objectif est de créer un conteneur PostgreSQL avec un volume nommé, le démarrer et observer les logs, puis créer un nouveau conteneur avec une version plus récente utilisant le même volume nommé pour démontrer comment les données persistent entre les mises à jour. Cet approche illustre la meilleure pratique Docker : ne pas modifier les applications dans les conteneurs, mais plutôt les remplacer par de nouvelles versions tout en préservant les données.

Points clés

  • Les volumes nommés permettent la persistence des données entre différentes versions de conteneurs, notamment pour les bases de données en production
  • La première démarrage d'un conteneur de base de données effectue des tâches d'initialisation importantes (création utilisateur admin, base de données par défaut), visibles dans les logs
  • Les mises à jour de patch de logiciels comme PostgreSQL dans Docker se font en créant un nouveau conteneur avec une version supérieure en pointant vers le même volume nommé
  • Les versions Docker de services doivent être spécifiées explicitement (ex: 9.6.1) plutôt que d'utiliser les tags flottants pour contrôler précisément quelle version s'exécute
  • Consulter le Dockerfile officiel sur Docker Hub est essentiel pour connaître le chemin exact du volume où les données doivent être stockées dans le conteneur

Questions fréquentes

Comment créer un volume nommé pour une base de données PostgreSQL ?

Vous spécifiez la syntaxe `nom_volume:/chemin/dans/conteneur` dans la commande docker run. Le nom du volume (à gauche des deux points) est celui que vous choisissez, et le chemin à droite des deux points vient du Dockerfile officiel de PostgreSQL sur Docker Hub.

Pourquoi les logs du deuxième conteneur PostgreSQL sont-ils beaucoup plus courts ?

Parce qu'il pointe vers le même volume nommé que le premier conteneur, les données et la base de données existent déjà. Le deuxième démarrage ne contient que quelques lignes de logs au lieu des nombreuses tâches d'initialisation du premier démarrage (création utilisateur, base de données par défaut, etc.).

Dois-je utiliser des outils spéciaux pour mettre à jour la version majeure d'une base de données PostgreSQL dans Docker ?

Oui, les mises à jour majeures nécessitent généralement des outils spécifiques pour chaque système de base de données (comme pg_upgrade pour PostgreSQL) et peuvent modifier le schéma. Les volumes nommés facilitent les mises à jour de patch (corrections mineures) qui ne nécessitent aucune modification de schéma ni mise à jour majeure des données.