Dans un article récent, je faisais une introduction à Docker où je prenais pour exemple le déploiement de Graphhopper. Dans un autre, je décrivais comment installer OSRM sur un serveur Linux, la tâche était tout de même assez complexe avec beaucoup de dépendances à installer.

J’ai donc regardé s’il existait une image Docker pour simplifier son installation tout en permettant d’utiliser plusieurs profils sur un même jeu de données. Malheureusement je n’ai pas trouvé chaussure à mon pied… J’ai donc créé mon premier Dockerfile.

Pour « puller » l’image :

docker pull dofabien/osrm

OSRM « mange » des fichiers .osm ou .osm.pbf que vous pouvez télécharger sur geofabrik.de. Dans l’exemple, j’ai téléchargé les données sur Rhône-Alpes en .osm.pbf que j’ai placé dans le répertoire /var/data.

Pour déployer OSRM sur ces données, avec le profile « car.lua » et pouvoir le requêter sur le port 5000 :

docker run -d -p 5000:5000 -v /var/data:/data \ 
  --name=osrm_rhone-alpes_car \ 
  -e PROFILE_LUA=car.lua \
  -e FILE_OSM=rhone-alpes-latest.osm.pbf \ 
  -e REFRESH=0 \
  dofabien/osrm
  • Un peu d’explications:
  • -d => on exécute le conteneur en tâche de fond.
  • -p [port de l’hote]:[port du conteneur]
  • -v [répertoire de l’hôte « partager » où sont les données]:[répertoire du conteneur]
  • –name [nom à donner au conteneur]
  • -e PROFILE_LUA=[nom du profile.lua qui se trouve dans /var/data/profile (coté hôte pour l’exemple)]
  • -e FILE_OSM=[nom du fichier .osm ou .osm.pbf que l’ont veut utiliser (placé préalablement dans /var/data)]
  • -e REFRESH=[1 si l’on veut qu’OSRM force la répréparation des données (utile lors d’une mise a jour des données ou d’un profile)

Ce qui est interagissant, c’est que l’on peut utiliser plusieurs profils sur des ports différents. Par exemple pour un calculer l’itinéraire à pied sur le port 5001, il suffit de remplacer car.lua par foot.lua et d’utiliser -p 5001:5000 pour le port.
On peut bien sûr créer nos propres profils en créant le fichier mon_profil.lua dans /var/data/profile.