Docker file de la database MusicBrainz

docker-logoLorsqu’on développe dans son coin une démo basée sur une nouvelle techno, il est fréquent d’avoir besoin de données de tests. Soit on se les construit à la main, soit on en récupère sur Internet. Le mouvement Open Data et les API mises à disposition par les grands du Web permettent de récupérer des données en temps réel. Dans les conférences, nombre de démos live utilisent les API de Twitter ou de Github. Ces données sont généralement formatées en JSON. Une connexion réseau est alors nécessaire.

Dans le cadre d’une série d’articles sur Elasticsearch et AngularJS, j’ai eu le besoin d’indexer des données de manière offline. Cherchant une source de donnée musicale, j’ai opté pour MusicBrainz qui, à l’instar d’IMDb pour le cinéma, est une plateforme ouverte collectant des méta-données sur les artistes, leurs albums et leurs chansons puis les mettant à disposition du publique. Cette plateforme est composée d’une base de données relationnelles et d’une interface web permettant d’effectuer des recherches, de consulter les données et de participer à l’enrichissement de la base. Last.fmThe Guardian ou bien encore la BBC s’interfacent avec MusicBrainz.

Dans l’article Elastifiez la base MusicBrainz sur OpenShift, je proposais 2 méthodes pour installer la base de données : récupérer une VM ou un dump de la base PostgreSQL. Dans les 2 cas, la procédure d’installation demandait une intervention humaine.
Ce billet vous en propose une 3ième : automatiser l’installation de base de données à l’aide de Docker. Après quelques lignes de commande et un peu de patience le temps de l’import du dump PostgreSQL, vous pourrez vous connecter localement à la base musicale contenant des données à jour.

L’image arey/musicbrainz-database

Basée sur l’image officielle de postgres, l’image Docker arey/musicbrainz-database installe la base de données PostgreSQL 9.4 ainsi que toutes les librairies nécessaires au fonctionnement de la base de données MusicBrainz (ex : postgresql-server-dev-9.4, postgresql-musicbrainz-unaccent).

Cette image vient avec le script shell create-database.sh utilisé pour créer la structure de données et importer le dump de la base de données MusicBrainz. Les étapes le décomposant sont les suivantes :

  1. Crée le schéma musicbrainz
  2. Crée les tables à partir des scripts DDL présent sur le GitHub de MusicBrainz
  3. Télécharge le dump de la base de données
  4. Importe le dump après l’avoir téléchargé par FTP
  5. Ajoute les index et les clés primaires

Le code source de l’image arey/musicbrainz est disponible sur GitHub.

Lignes de commande

Deux lignes de commandes sont nécessaires pour obtenir une base de données alimentées et accessibles depuis n’importe quel client SQL :

Pour tester l’installation de la base, exécuter la requête SQL suivante comptant le nombre d’artistes référencés :

Lorsque le client psql demande de saisir un mot de passe, sairi ‘musicbrainz’. Vous obtiendrez la sortie suivante :

Depuis une application Java, la chaine de connexion JDBC à utiliser est la suivante : jdbc:postgresql://localhost:5432/musicbrainz
Login et mot de passe sont identiques : musicbrainz / musicbrainz
Pour les utilisateurs Windows ou MacOSX utilisant boot2docker, il est nécessaire de remplacer localhost par l’IP donnée par la commande boot2docker ip.

Sous le capot

Avant de construite ma propre image Docker, j’ai étudié les images Docker existantes telles que rickatnight11/docker_musicbrainz et jsturgis/musicbrainz-docker. Elles installent un serveur MusicBrainz complet avec sa partie front. Je souhaitais une image plus légère centrée sur la base PostgreSQL. Cela dit, je mentirais en disant que je ne m’en suis pas inspiré.
Vous trouverez ci-dessous le fichier Dockerfile et le script de création de la base.

Dockerfile

Script shell createdatabase.sh

Conclusion

Le script shell de création de la base m’aura demandé plus d’efforts que le Dockerfile. Indépendant de tout script externe, il devrait être stable dans le temps. L’image devra par contre évoluer au fil du temps, par exemple lors de montée de version de PostgreSQL.

L’image arey/musicbrainz-database peut être utilisée avec docker-compose. C’est désormais le cas sur le projet musicbrainz-elasticsearch qui l’utilise pour démarrer la base de données MusicBrainz et un cluster Elasticsearch.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *