Docker

Depuis maintenant plusieurs années, j’héberge chez moi un serveur, celui qui vous permet de consulter ce site. Il me sert également de base de test pour mes différents projets mais également l’intégration continue: jenkins, sonar, …

Ce serveur datant de plusieurs années et reposant toujours sur la même architecture, j’avais du mal à m’y retrouver. Puis j’ai entendu parler de Docker!

Docker est comme un système de virtualisation… mais léger. En fait, les ressources systèmes (CPU, RAM, …) ne sont pas réservées par la machine mais partagées avec l’hôte. Ceci qui permet d’ajouter beaucoup de services sur une même machine tout en maintenant le système propre (en effet, le système étant virtuel, les paquets ne sont pas installés sur l’hôte et l’accumulation des mises à jour n’alourdit rien).

Pour cela, Docker se compose d’image que l’on trouvera ici. A partir d’une image (récupérée avec la commande docker pull jenkins par exemple), on va pouvoir exécuter le container: docker run jenkins. Et toute la magie se trouve là! Cette simple commande, va permettre de créer une VM. Si le système s’engorge ou que l’on veut déplacer la VM, il suffit d’arrêter le container et de relancer ces commandes… Oui mais, la configuration disparait?

Et ben non, on peut « mapper » des dossiers entre l’hôte et la VM aussi simplement que ceci: docker run -v /data/docker/jenkins/conf:/var/jenkins_home jenkins. Et de même pour les ports avec -p 80:8080.

Finalement, Docker est fantastique: il va permettre de créer un ensemble de service compartimenté et de garder un hôte propre! Lors d’une MAJ, je vais détruire totalement mon système pour le recréer, plus besoin d’empiler des années de MAJ et d’engorger le système! De plus, grâce au mapping des ports et des volumes, je sais exactement ce qui est ouvert au reste du monde et où se trouve les données.

Je n’en parle pas ici, mais Docker permet également de créer facilement ses propres images et donc d’automatiser le déploiement d’un service (par exemple un tomcat avec des webapps préconfigurés).