Né seulement en 2013 dans la tête d’un Français, Docker est une technologie open-source dont on entend de plus en plus parler. Qu’est ce que c’est? Ça doit être vraiment bien, non?! Ce court article décrit rapidement ses avantages et fini par l’exemple du déploiement de Graphhopper.
Wikipedia le décrit comme cela
« Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur virtuel, qui pourra être exécuté sur n’importe quel serveur Linux »
Le conteneur est basé sur une image d’un système d’exploitation Linux (Debian, Ubuntu, etc). Il peut être déployé, modifié, et sauvegardé. Le gros avantage est que chaque centenaire contient toutes les dépendances pour faire fonctionner une application. Comme une machine virtuelle? Un peu, mais à la grande différence qu’aucun OS supplémentaire n’est embarqué et que les paquets nécessaires à un conteneur seront partagés avec les autres conteneur qui l’utilisent. Résultat, l’image est beaucoup plus performante (elle se lance en une seconde) et prend beaucoup moins de ressources et de place sur le disque dur..
Il est donc possible de sauvegarder l’image créée pour la déployé sur n’importe quel environnement Linux ou bientôt Windows sans avoir de problèmes.
Cette portabilité liée au poids de l’image et son indépendance vis-a-vis du système d’exploitation permet de migrer une application d’un serveur à un autre sans prise de tête. D’ailleurs les grands hébergeurs de « Cloud » (Amazon, Google Compute, Microsoft Azur, etc…) ont déjà intégré cette technologie.
Enfin, créer un conteneur, on peut s’appuyer sur un Dockerfile. C’est un simple fichier texte qui va donner décrire comment l’image va être construite (quel OS de base, ce qui va être installé, les ports visibles par l’hôte, les scripts à exécuter, etc.). Il en existe des milliers disponibles ici
Mais concrètement?
Installation de Docker
Nous allons tout d’abord installer Docker sur le serveur (un ubuntu 14:04)
Pour installer Docker avec apt-get, il suffit d’un simple :
sudo apt-get install docker.io
Déploiement de Graphhopper
Nous avons Docker d’installé, nous allons déployer le calculateur d’itinéraire Graphhopper qui est un peu pénible à installer en temps normal (Il faut installé la bonne version de Java, etc…)
Pour installer l’image, nous allons utiliser ce Dockerfile
Préalablement, nous avons téléchargé les données qui vont servir de base pour le calculateur. On utiliseles données OSM en .pbf de Rhône Alpes que nous avons placé dans un dossier /var/data/graphhopper.
Pour lancer le conteneur, il suffit de faire :
sudo docker run \
-d \
--name=graphhopper-rhone-alpes \
-v /var/data/graphhopper:/data \
-p 8990:8989 \
sogorkis/graphhopper \
/graphhopper/start.sh
En fait, Docker va regarder si les images nécessaires ont déjà été téléchargées. Si ce n’est pas le cas, il va les télécharger puis construire l’image. Le tag -v indique les répertoires partagés entre la machine hôte et le conteneur. Ici, nos données sont dans /var/data et nous voulons le monter sur /data de notre conteneur. Par défaut n’as aucun port d’ouvert. Pour router un port il faut utiliser le tag -p , ici on route le port 8989 du conteneur (port de graphhopper) vers le port 8990 de notre serveur.
Pour voir ce qu’il se passe dans ce conteneur :
sudo docker logs -f graphhopper-rhone-alpes
Il n’y a plus qu’a attendre que les données se préparent…
Graphhopper avec les données Osm sur Rhone-Alpes est désormais accessible sur le port 8990
Simple et rapide, n’est-ce pas?