Accueil / Blog / Métier / 2014 / Utiliser Docker pour faciliter les migrations de base de données

Utiliser Docker pour faciliter les migrations de base de données

Par Mathieu Leplatre publié 07/11/2014
Une forme d'utilisation de Docker très pratique pour le développement!
Utiliser Docker pour faciliter les migrations de base de données

Containers by s_volenszki - CC-BY-NC

Docker est très polyvalent, et peut répondre à (vraiment) énormément de besoins différents. Vous en avez probablement déjà entendu parler pour mettre des applications en production.

Même si j'ai déjà écrit plusieurs Dockerfiles pour packager et déployer des applications Web, ce qui m'a le plus convaincu c'est son utilisation pour les bases en données en développement :)

Par exemple, quand on travaille avec des bases relationnelles, en développant des fonctionnalités dans des branches, c'est assez pénible de réinitialiser les schémas de tables qui divergent à chaque changement de branche (comme avec Django South ou 1.7).

De manière similaire, c'est assez pénible quand on veut rejouer des imports de données, des migrations, sur différents schémas de base, ou avec plusieurs versions de PostgreSQL etc.

Dans cet article, je vais présenter comment utiliser la fonctionnalité commit de Docker pour résoudre ces problèmes.

Exécuter PostgreSQL avec Docker

En premier lieu, vous devez choisir une image dans l'Docker index.

Quand vous avez trouvé l'image qui correspond à vos besoins (ou la plus populaire), récupérer une image est aussi facile que ça:

sudo docker pull helmi03/docker-postgis

Ensuite, pour l'exécuter en tâche de fond, sur localhost:5432:

sudo docker run -d -p 5432:5432 helmi03/docker-postgis

Félicitations, vous avez un conteneur PostGIS qui tourne. Loggez vous en superuser avec docker/docker.

Vous pouvez voir son identifiant avec sudo docker ps, et l'éteindre avec sudo docker stop <ID>.

Commit

La "fonctionnalité qui tue" de Docker, c'est son système de fichier incrémental, qui permet de tagger et committer les états des conteneurs.

Par exemple, une fois que vous aurez une base de données vide dans le conteneur, vous pourrez sauver son état:

sudo docker commit <ID> postgis-empty

Puis, par exemple, vous allez initializer les tables pour une de vos applications, créer des utilisateurs, etc. Vous sauvegardez !

sudo docker commit <ID> geotrek-0.28-empty

Chargé des données dans la base ? Commit !

sudo docker commit <ID> geotrek-0.28-demo

Maintenant que vous avez effectué une série de sauvegardes d'état, vous pouvez arrêter le conteneur et le relancer à un état précédent! Docker est le git des machines virtuelles!

Pour voir la liste des états, c'est sudo docker images:

$ sudo docker images
REPOSITORY                    TAG        IMAGE ID        CREATED        VIRTUAL SIZE
geotrek-0.28-demo             latest     48f51d78273a    2 weeks ago    1.236 GB
geotrek-0.28-empty            latest     3985183cd01a    4 weeks ago    1.208 GB
postgis-empty                 latest     24ec864dc058    4 months ago   844.4 MB
helmi03/docker-postgis        latest     f62d8f0fb8af    9 months ago   746.2 MB

Checkout

Relancer un état précédent c'est très très simple, c'est comme la première fois où vous avez lancé l'image récupérée l'image de l'index Docker, sauf que maintenant vous spécifiez le nom de l'état!

D'abord, éteignez l'instance courrante:

$ sudo docker ps
CONTAINER ID        IMAGE                      COMMAND       CREATED       STATUS      PORTS
7e1e44ce36d8        geotrek-0.28-demo:latest   "/start.sh"   6 hours ago   Up 6 hours  0.0.0.0:5432->5432/tcp

$ sudo docker stop 7e1e44ce36d8

Re-lancer à un état précédent:

$ sudo docker run -d -p 5432:5432 postgis-empty

Vous allez vite vous rendre compte que vous pouvez:

  • Lancer plusieurs versions de vos conteneurs (ou de versions de PostgreSQL) sur différents ports
  • Restaurer l'état de votre base de données nécessaire pour faire tourner la branche master de votre projet, en une commande!
  • Rejouer des scripts de migrations
  • Faire tourner les différentes bases de vos clients sans changer de configuration
  • ...
  • Avoir la même approche avec CouchDBRedisElasticSearch, ...

Pour être franc, c'est comme git, ça a vraiment changé ma façon de travailler, et maintenant je ne peux plus m'en passer...

PS: Et pour ceux qui sont sous Mac ou Windows, j'ai envie de dire... dommage.

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
SIG : Préparation de données pour la création de tuiles vectorielles 30/01/2020

Pour servir des données sous forme des tuiles vectorielles une préparation est nécessaire comme ...

Améliorez votre SQL : utilisez des invariants dans les conditions Améliorez votre SQL : utilisez des invariants dans les conditions 05/11/2019

Il suffit parfois de repenser la façon d'exprimer une condition de filtrage dans une requête SQL ...

Améliorez votre SQL : utilisez des index filtrés Améliorez votre SQL : utilisez des index filtrés 12/11/2019

L'indexation d'une base de données est un vaste sujet, dans cet article nous examinerons une ...

Les logiciels et API pour géocoder 15/10/2019

On compare ici les principaux services en ligne et logiciels libres de géocodage du point de vue ...

PostgreSQL utilisations avancées de generate_series pour générer du contenu PostgreSQL utilisations avancées de generate_series pour générer du contenu 27/06/2017

Générer du contenu en masse permet de tester les requêtes, index et traitements complexes sur ...