Comment customiser une image Docker
Je suis actuellement en train de me mettre sur Docker. En résumé (Wikipedia le fait mieux que moi), Docker est une solution libre de virtualisation qui optimise le déploiement des applications en virtualisation un peu tout l’OS, la base de données, le serveur d’application et soyons fous le poste de développeur.
Au Devoxx 2015, c’était le sujet Hype du moment.
J’ai décidé de me lancer sur ce sujet car je suis en train d’expérimenter quelques technos (MQTT entre autres) et les installations m’exaspèrent…
Bon voila mon problème, pour faire un POC, j’ai voulu installer rabbitmq et ajouter quelques configurations supplémentaires
- Activation du plugin mqtt
- Activation de la console d’administration
- Paramétrage d’un utilisateur pouvant accéder à la console
Pré requis
vérifier que docker est bien installé sur votre poste.
docker pull hello-world
Perso, j’utilise pour cela Debian (what else ) 8.0.
Construction de l’image
$ mkdir rabbitmq-mqtt $ touch Dockerfile
Dans le fichier Dockerfile
FROM rabbitmq:3-management MAINTAINER Votre serviteur <alexandre@test> ENV RABBITMQ_DEFAULT_USER user ENV RABBITMQ_DEFAULT_PASS password EXPOSE 18883 RUN rabbitmq-plugins enable rabbitmq_mqtt
En résumé, j’utilise l’image Docker officielle rabbitmq, j’ajoute deux variables d’environnement spécifiant les utilisateurs et je lance une commande permettant d’activer le support de mqtt
Ensuite, il suffit de construire l’image dans le répertoire crée
$ docker build -t alexandre/rabbitmq-mqtt .
Sending build context to Docker daemon 3.072 kB Sending build context to Docker daemon Step 0 : FROM rabbitmq:3-management ---> 327b803301e9 Step 1 : MAINTAINER Votre serviteur <alexandre@test> ---> Using cache ---> f660ca254f19 Step 2 : ENV RABBITMQ_DEFAULT_USER user ---> Using cache ---> e54a1a4ea60f Step 3 : ENV RABBITMQ_DEFAULT_PASS password ---> Using cache ---> 44050e7fc3a2 Step 4 : RUN rabbitmq-plugins enable rabbitmq_mqtt ---> Using cache ---> bdd369338fec Successfully built bdd369338fec
Et voilà, il ne reste plus qu’à exécuter un container basé sur cette image
$ docker run --rm -p 8080:15672 alexandre/rabbitmq-mqtt
Conclusion
on peut voir que l’ajout de fonctionnalités supplémentaires est assez facile avec docker. L’exemple est volontairement simpliste. Il existe également docker-compose qui permet de faire la même chose ( et + encore) en étant beaucoup plus puissant dans la gestion des dépendances