Formation Docker 4 Ops : pourquoi former les Ops à Docker?
Docker est un sujet actuellement incontournable dans l’IT : tout le monde en parle, ou presque. Et pourtant, Docker est encore relativement peu utilisé en production. Pour quelle raison ? Si Docker bouleverse la façon dont sont pensées et distribuées les applications, aujourd’hui l’outil reste en majorité utilisé par des développeurs, mais pas par les ops, qui connaissent assez mal son fonctionnement. D’où l’idée de former les ops à l’usage de Docker.
En nous intéressant à Docker, nous avons vite fait le constat que l’outil était essentiellement utilisé par des développeurs, le plus souvent pour faire de l’intégration continue et des tests. Beaucoup plus rarement, on retrouvait Docker en production, et quand c’était le cas Docker n’était pas régulièrement utilisé par les ops. Au final, les ops se retrouvaient à utiliser Docker sans vraiment savoir ce qu’il y avait derrière. Ça fonctionne… mais que passe-t-il si on doit débugguer ?
Nous avons creusé la question, mais toutes les documentations disponibles étaient orientées vers les développeurs. Souhaitant approfondir le sujet, nous avons également suivi une formation sur les conteneurs… pensée par des développeurs, pour des développeurs. De fait, impossible d’obtenir des réponses à nos questions liées au système (règles de firewall, communication des conteneurs entre eux…comment tout cela fonctionne-t-il côté système ?).
Comme nous ne sommes pas les seuls à nous poser ces questions, nous avons décider de créer la formation que nous aurions aimé recevoir : Docker, pour les ops. Concrètement, qu’est-ce qu’un conteneur ? Quelles sont les notions impliquées au niveau du noyau Linux (namespace, cgroups, seccomp, capabilities), quelles sont les informations essentielles pour une mise en production ? Des informations qui ne sont généralement pas utilisées par les développeurs, parce qu’ils ne les connaissent pas, et qu’elles ne leur sont pas utiles.
Indépendamment du fait que Docker est une nouvelle technologie, c’est une manière de déployer et gérer des applications complètement différente de ce qu’on fait d’habitude. Docker résout beaucoup de problèmes… mais en crée également d’autres. Heureusement, Docker génère moins de problèmes qu’il n’en résout, mais ce sont de nouveaux problèmes, que les ops ne sont pas habitués à traiter. Parfois, ils ne sont même pas au courant de leur existence, par méconnaissance du produit et de son fonctionnement. Par exemple, la notion de layers, qui influe sur la manière de créer les conteneurs, sur le filesystem, sa taille…
Contenu de la formation Docker 4 Ops
La formation Docker 4 Ops débute par un rapide historique du monde du conteneur sous Unix, avant d’en venir à Docker. En quoi est-il différent des autres conteneurs ? Comment expliquer l’engouement sans précédent autour de ce système de conteneurs ? La formation laisse une large place à la pratique, avec environ ⅓ de théorie pour ⅔ d’expérimentation. Très rapidement, les participants commencent par lancer un conteneur, apprennent à récupérer des informations avec des commandes, et voient comment le conteneur se comporte.
Ensuite, on explique concrètement tout ce qui s’est passé durant cette phase de manipulation : comment l’image est arrivée, comment le conteneur a été lancé, etc.
On aborde ensuite le sujet des principales commandes, les plus utiles, avant d’entrer dans les concepts de namespace, de primitives noyau Linux, très importantes dans Docker :
- cgroups : ils permettent de donner des limites au conteneur, comme la consommation de RAM et CPU par exemple. Ces concepts ne sont pas spécifiques à Docker, mais Docker les intègre nativement. Cela permet de ne plus gérer ses ressources en termes d’utilitaires, mais en termes de service.
- Namespace : permet de former “logiquement” le conteneur, de ségreger le réseau, les process, etc.
- Capabilities : définissent l’ensemble d’actions que peut faire le conteneur, comme ouvrir un socket réseau (par exemple, un conteneur de batch effectuant des calculs chaque nuit n’aura aucune raison de se connecter au réseau, et sera donc restreint).
- seccomp : sorte de firewall d’appel système noyau (seccomp filtre les appels système au noyau), permettant d’autoriser seulement une partie des fonctions. Un conteneur faisant de nombreux appels système, seccomp demande un peu de finesse dans son utilisation : une bonne connaissance des appels systèmes et des primitives du noyau est nécessaire.
- AppArmor : framework de sécurité qui donne des autorisations et restrictions explicites au conteneur (en spécifiant par exemple là où le conteneur n’a pas le droit d’écrire).
- SELinux : un autre framework de sécurité, utilisé de façon similaire à AppArmor dans le contexte des conteneurs.
Toutes ces briques permettent d’obtenir des conteneurs sur mesure, autorisés à effectuer seulement certaines actions en fonction des besoins. Cela assure un meilleur contrôle des ressources et de la sécurité des conteneurs, ce qui est indispensable en production.
Durant la formation, toutes ces notions sont mises en pratique pour faciliter leur assimilation. Par exemple, pour les cgroups, les participants déploient des conteneurs dédiés au calcul. Dans un premier temps, on fait chauffer le CPU, avant de faire modifier les conteneurs pour n’allouer que 30% du CPU. Pour illustrer les capabilities, on demande aux participants de créer un conteneur qui n’a que le droit de pinger.
Enfin nous abordons la notions des layers et des images, et comment utiliser les images prépackagées du Docker Hub (Apache, Nginx, Redis…), avant d’expliquer comment ces images sont construites. Chaque image est en effet composée de layers, ou couches, soit chacune des commandes lancées pour créer l’image. Par exemple, pour une image Nginx, on part d’une image Debian (première couche), qui est mise à jour (deuxième couche), avant d’appeler Nginx (troisième couche).
L’avantage des layers est qu’ils sont partageables entre conteneurs. Si on a 50 conteneurs Debian sur une machine, ils peuvent se partager les 7 ou 8 premiers layers pour construire la même base; les dernières couches seront utilisées pour finaliser chaque conteneur. De fait, au moment de la création des images, il est important de composer ses layers intelligemment pour optimiser la place sur le système de fichiers. De cette façon, 50 conteneurs d’un Giga chacun peuvent occuper seulement 2 Gigas sur le disque.
Enfin, la dernière partie de la formation est consacrée à une mise en pratique avec la construction d’une petite infrastructure semi orchestrée avec Docker Compose. Cet outil permet de décrire en mode déclararif les types de conteneurs souhaités, comment les construire et les démarrer. L’objectif de l’exercice est de mettre en place :
- Deux conteneurs Apache
- Proxy de load balancing (HAProxy)
- Base de donnée MariaDB
- Redis pour le cache mémoire
- OwnCloud
A l’issue de l’exercice, on dispose de 6 conteneurs,avec une seule commande docker-compose à lancer pour que tout soit créé de façon automatique.
Inscriptions pour la prochaine formation Docker 4 Ops