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

 

 

Vus : 662
Publié par Littlewing : 368