Naviguez tranquille avec Docker

Depuis quelques mois je vois régulièrement passer des articles parlant de Docker. Au début, je ne comprenais pas trop ce que c’était et je me disais que si c’était si cool que ça, j’en entendrais parler encore. Puis je revois passer, j’ai des besoins, je me renseigne, je DuckDuckGooglise… Bref, ça a l’air cool. Je vais donc essayer de faire un article assez court histoire de vous faire rapidement comprendre pourquoi Docker c’est de la balle.

Pour la petite histoire, j’ai décidé de m’y mettre après que Manjaro m’ait cassé mon environnement de développement pour FreshRSS (le paquet Apache qui passe à une version supérieure et PHP qui ne fonctionne plus). Comme je ne voulais pas me refaire avoir, j’ai décidé de mettre en place un environnement de développement plus stable. Après avoir cherché des solutions basées sur VirtualBox ou Vagrant, trop lourds pour moi, je me suis penché sur Docker.

L’idée de Docker c’est de séparer des applications dans des environnements séparés et de permettre de les faire communiquer entre elles. En gros, ce sont des machines virtuelles très légères qui se lancent en quelques secondes (voire moins !).

Prenons un cas concret. Je développe aujourd’hui beaucoup sur ma machine personnelle. Pour ça j’ai besoin d’Apache configuré avec PHP et d’une base MySQL/MariaDB. Problèmes :

  • À chaque réinstallation de mon PC je dois me retaper la configuration (vas-y que j’oublie ce paquet, puis vas-y qu’il faut re-paramétrer le timezone dans la configuration de PHP, puis ça dépend toujours de la distribution, etc.)
  • Des soucis lors des mise à jour (voir paragraphe au-dessus).
  • Je n’ai pas envie que les services Apache et MySQL tournent tout le temps et c’est chiant à devoir lancer / stopper à chaque fois.

Casse-tête et chiant. Heureusement, Docker me permet de me faciliter la vie. J’ai donc créé un fichier (un Dockerfile, un peu l’équivalent d’un Makefile mais pour les machines Docker) qui me paramètre automatiquement une machine virtuelle avec tout l’environnement qui va bien. Je n’ai alors plus qu’à lancer celle-ci en lui précisant de monter le répertoire de FreshRSS au bon endroit dans la VM et en 2 secondes (le temps de lancer Apache et Mysql) tout est fonctionnel et prêt à l’emploi ; je peux bosser. Ce que ça m’apporte par rapport aux points précédents :

  • La configuration est gérée une et une seule fois lors de la création de la VM et tout tient dans quelques fichiers que je peux facilement sauvegarder et envoyer sur un autre PC. Et comme c’est de la virtualisation, je suis sûr que quelque soit le système hôte (Manjaro, Fedora, Ubuntu), ça marchera tel quel.
  • L’environnement est séparé de celui du système principal et sachant que la base pour mon environnement de développement est une CentOS, je suis sûr que ça restera stable.
  • Je lance la VM aussi rapidement que je lancerais un programme quelconque. Un petit alias bash pour éviter de devoir tout réécrire à chaque fois, notamment le point de montage et je ne me soucis plus de rien. Quand j’ai terminé de développer, je quitte la VM et c’est fini (aussi rapide que de fermer le terminal)

Ça c’est un cas de figure – le mien – mais il y en a bien d’autres. On peut imaginer déployer des applications à la volée selon les besoins, distribuer un programme, l’utiliser dans une suite de tests, etc.

Je me rends compte que je ne me suis pas trop penché sur Docker lui-même dans cet article alors qu’il a pleins d’atouts :

  • Je parle de VMs depuis tout à l’heure, mais ce n’est pas tout à fait ça. VirtualBox gère des VMs. pour Docker, ce sont des conteneurs. Il n’y a en fait que la couche applicative qui est virtualisée (il y a un schéma plus bas qui illustre bien ça). D’ailleurs si je fais un uname -r dans le conteneur, j’obtiens 3.10.40-1-MANJARO qui correspond bien entendu au numéro de kernel de mon système hôte. Il n’y a pas donc pas de boot, juste le lancement des applications.
  • Les conteneurs sont des instances d’images. Une image correspond en gros à l’ISO d’une distribution réduite à son minimum. Si je prends la CentOS par exemple, elle fait 300.6Mo, ce qui n’est pas énorme.
  • On peut lier les conteneurs entre eux. Je ne me suis pas encore penché dessus parce que je n’en ai pas besoin, mais c’est clairement un usage intéressant (je ne l’ai pas fait pour FreshRSS, mais je pourrais très bien séparer la base de données et Apache dans deux conteneurs différents)
  • Il y a un système de commits similaire aux gestionnaires de versions comme Git, ce n’est pas anodin.
  • Il y a une petite démo interactive de 10 minutes, si vous ne voyez pas trop de quoi je veux parler ou si vous ne voulez pas l’installer sur votre PC juste pour tester, je vous la conseille !

Le petit schéma qui compare machines virtuelles et conteneurs :

docker_containers_vmsNotez que ça repose sur une techno récente du noyau Linux : LXC. Noyau trop vieux, pas de Docker !

Si vous voulez prolonger la lecture je vous conseille :

Et un petit bonus de fin : j’ai eu des soucis au début pour lancer mes conteneurs. J’ai compris ensuite qu’il fallait les droits root donc passer par sudo. Il y a plus simple : une fois Docker installé, ajoutez votre utilisateur au groupe Docker (quelque chose du genre # usermod -aG docker mon_user).

{4} Thoughts on “Naviguez tranquille avec Docker

    • Exact, j’étais tombé sur ton site aussi qui m’avait bien aidé dans mes recherches, j’ai oublié de te citer ! Je rajoute ton lien dans l’article ;)

  1. Salut Marien,

    Justement, j’avais pensé à toi lorsque je m’amusais avec Docker. Pour Wallabag, ils ont fait un Dockerfile, très pratique pas forcément pour avoir le logiciel installé sur son poste mais pour pouvoir le tester vite fait pour voir si il répond aux besoins.

    docker pull bobmaerten/docker-wallabag && docker run -p 8080:80 -d bobmaerten/docker-wallabag

    Je pense que c’est une très bonne idée de proposer cela, comme une sorte de démo. Ca peut aussi se voir comme un environnement de tests qu’on pourrait distribuer à toutes les gentilles personnes qui veulent bien passer un peu de temps à tester l’application.

    Le repository privée, c’est très sympathique.

    # Créer un repository privée sur la même machine #
    docker pull samalba/docker-registry
    docker run -d -i –name registryDocker -p 5000:5000 -m 512m samalba/docker-registry
    docker pull debian:latest
    docker tag debian localhost:5000/debian
    docker push localhost:5000/debian
    docker pull localhost:5000/debian

    Tcho !

    • Je compte faire ça pour FreshRSS aussi mais je cherchais la forme pour le distribuer. Ce sont de bons cas d’utilisation (démo et tests) :)

      Je ne connaissais pas encore les repositories privés, je regarderai !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">