Migrer PostgreSQL vers une version supérieure dans Docker

Dans ce tutoriel, nous allons voir comment migrer PostgreSQL vers une version supérieure lorsqu’il est exécuté dans un conteneur Docker.

Que ce soit pour bénéficier des nouvelles fonctionnalités, améliorer les performances ou maintenir un environnement à jour, la mise à niveau d’une base PostgreSQL nécessite quelques précautions.

Nous verrons les différentes étapes pour effectuer la migration en toute sécurité, sauvegarder vos données, déployer la nouvelle version et valider son bon fonctionnement.

Cas d’usage

Pour illustrer cette migration, je vais partir d’un cas concret, suite à une mise à jour de OpenProject de la version 13 à la version 16, il est nécessaire également de mettre à jour PostgreSQL qui est en version 13, comme on peut le voir sur la capture ci-dessous :

PostgreSQL ne supporte pas la montée de version directement en modifiant la version (tag) du conteneur, il faut donc passer par une sauvegarde et ensuite importer la sauvegarde dans le nouveau conteneur.

Précaution

Avant de commencer à faire la mise à jour, faire une sauvegarde de l’ordinateur et dans le cas d’une machine virtuelle, faire un snapshot, le retour arrière sera plus rapide.

Sauvegarder la base de données

Voici la déclaration du service dans mon fichier docker-compose.yml :

Comme on peut le voir, le nom du mon service est db et mon serveur PostgreSQL est en version 13, on peut également voir que je fais redirection du dossier data de PostgreSQL dans un répertoire local sur mon serveur hôte Docker.

Pour faire le sauvegarde entrée la commande suivante :

sudo docker compose exec -t db pg_dump -U postgres -F c -b -v -f /var/lib/postgresql/data/file-backup.pgsql <DATABASE>

Patienter pendant la sauvegarde :

Dans le dossier (volume) vérifier que le fichier de sauvegarde est présent :

Mise à jour et restauration de la base de données

Editer le fichier docker-compose.yml et modifier le service PostgreSQL en modifiant le tag de l’image et en modifiant le volume.

Arrêter les conteneurs :

sudo docker compose down -v

Télécharger la nouvelle image de PostgreSQL :

sudo docker compose pull

Démarrer le conteneur PostgreSQL qui sera sur la version cible de mise à jour

sudo docker compose up -d <SERVER-NAME>

Vérifier que le nouveau volume (dossier) est créé :

Copier dans le nouveau volume (dossier) le fichier de sauvegarde à l’aide de la cp.

Se connecter en au conteneur PostgreSQL en bash

sudo docker compose exec <SERVER-NAME> bash

Aller dans le dossier /var/lib/postgresql/data/ du conteneur et vérifier que le fichier de sauvegarde est présent.

Restaurer la base de données :

pg_restore -U postgres -d <DATABASE> <FILE-NAME>

La restauration effectuée, arrêter le conteneur.

sudo docker compose down

Puis démarrer l’ensemble des services :

sudo docker compose up -d

Pour continuer, vérifier le bon fonctionnement de l’application et la prise en compte de la mise à jour.

Nettoyage

Pour finir la migration, une fois que vous avez valider le bon fonctionnement, nettoyer le serveur.

Supprimer les volumes, conteneur et dossier de l’ancienne version de PostgreSQL.

Supprimer le snapshot dans le cas d’un ordinateur virtuel.

Conclusion

La migration de PostgreSQL vers une version supérieure dans un conteneur Docker est une opération simple à condition de bien préparer chaque étape.

En réalisant une sauvegarde complète avant toute manipulation et en testant la nouvelle version avant la mise en production, vous limitez les risques et garantissez la continuité de service.

Grâce à Docker, la mise à jour devient plus souple et rapide, tout en conservant un environnement maîtrisé et reproductible.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire