
La technologie Docker
Présentation
Docker est une solution complète de containerisation.
La containerisation est un principe qui vise à isoler les processus d’une machine. Chaque applicatif fonctionne dans son propre microsystème afin de ne pas dépendre d’autres composants, on peut donc déclarer explicitement ce avec quoi notre programme peut interagir. Toutes les dépendances sont empaquetées avec l’application. Ce système permet donc de créer une image d’application réplicable et fiable.
Le conteneurisation est de plus en plus adoptée. Le principe est assez ancien mais a gagné en popularité avec le lancement de l’outil Docker qui en a simplifié l’utilisation. C’est donc aujourd’hui indispensable en entreprise.
D’après un rapport sur le marché, plus de 3,5 millions d’applications sont conteneurisées avec Docker, et plus de 37 milliards d’applications conteneurisées ont été téléchargées et déployées. Voir l’étude du marché.
Enfin, avec la mode du cloud computing, on utilise de plus en plus cette technologie. Le cloud est en fait un ensemble d’ordinateurs interconnectés. L’utilisation de conteneurs permet de simplifier l’isolation des processus et l’interaction entre plusieurs services dans une telle infrastructure.
Mon expérience
J’ai utilisé Docker en entreprise pour plusieurs projets. L’un d’eux est XLSXPort fait à Aberia, une plateforme de génération de rapports sous format xlsx (Excel). Un site permet de définir quelles statistiques exporter, sur quelle plage horaire, et à quelle fréquence les générer ; le serveur s’occupe ensuite de générer le rapport et l’envoyer dans le répertoire de l’administrateur.
La machine sur laquelle nous devions installer notre application subdivisée en plusieurs services (interface web NestJS, base de données Redis, générateur de fichier Excel en Kotlin et Apache POI) était déjà responsable de plusieurs autres applications. Certains développeurs voient déjà le problème : ces applications ont des dépendances qui interfèrent avec notre solution. Installer plusieurs version de NodeJS ou plusieurs JDK est souvent source d’erreur.
Afin d’éviter une réécriture des services ou de demander une autre machine sur laquelle déployer, j’ai simplement utilisé la technologie Docker. En utilisant trois conteneurs - un pour l’interface web, un pour la base de données, et un pour le service d’extraction - qui contiennent chacun leur dépendance, j’ai contourné ce problème et fait gagner un temps précieux à l’entreprise.
Un deuxième projet parlant sur cette compétence est MICCGUI. C’est un projet de création d’une interface web de gestion de centre d’appel. La solution est développée autour d’une maquette WordPress qui nous a été fournie par la société Ad’on.
La première chose à noter est qu’un MICCGUI doit pouvoir accéder à une instance de Microsoft SQL Server qui demande des drivers spécifiques. Aucune image docker WordPress ne possède directement ces drivers, pour automatiser le processus d’installations de ces derniers il faut donc créer une image.
//Dockerfile
FROM wordpress:6.1.1-php8.1-apache
// Installation des drivers et configurations
RUN docker-ext-install ...
COPY ./wp-content ./wp-contentDeuxièmement, la base de donnée doit être régulièrement sauvegardée en cas de panne, d’où la présence d’un service de backup qui exporte la base de données régulièrement. Aussi, la base de données doit être générée à partir de l’export existant et d’une configuration spécifique. Elle nécessite donc sa propre image.
Enfin, il est utile d’avoir des outils d’administration sur ce type d’applications car elles utilisent fortement la base de données, donc un service d’administration tel que PhpMyAdmin est ajouté.
C’est de cette façon que nous avons notre infrastructure stable, reproduisible avec sauvegardes, tout cela grâce à une infrastructure containerisée.
Autocritique
Je maîtrise cette technologie, ce qui est important dans mon profil d’ingénieur full-stack DevOps. Je sais manipuler les containeurs, créer mes images et organiser mon infrastructure ; il ne me reste qu’à apprendre des détails complexes comme gérer le lien entre un containeur et une clé USB car c’est rare d’en avoir l’utilité.
En ce qui concerne ma vitesse d’acquisition, j’ai eu quelques difficultés lors de mes premiers contacts avec la technologie en mars 2021. En effet, apprendre seul un outil de gestion d’infrastructure, en ayant aucune connaissance sur le domaine au préalable, n’est pas toujours simple. Mais après deux semaines d’auto-formation intensive sur les documentations, j’ai réussi à créer des infrastructures fonctionnelles qui, aujourd’hui encore, supportent de nombreux services en production.
Je n’ai pas encore beaucoup de recul sur cette compétence, mais j’ai tout de même deux conseils pour ceux qui voudraient apprendre cet outil :
- N’apprenez pas seul si vous le pouvez, demandez de l’aide à des personnes qui connaissent Docker ;
- N’apprenez pas Docker purement en ligne de commande, apprenez directement avec Docker compose car un fichier de configuration sera toujours plus lisible qu’une commande de 5 lignes.
Dans mon profil DevOps, Docker prend une place centrale. Je trouve que gérer le cycle de vie d’un logiciel de A à Z est très gratifiant. Docker, et plus globalement la technologie des conteneurs, est indispensable pour cela. J’aimerai donc suivre une formation afin de valider mes acquis.