Compétence Technique

Docker

Conteneuriser des applications et faciliter leur exécution dans des environnements homogènes.

Ma définition

Docker est une technologie de conteneurisation qui permet de créer, déployer et exécuter des applications dans des environnements isolés appelés conteneurs. Ces conteneurs embarquent tout le nécessaire à l’exécution d’une application : le code, les dépendances, les bibliothèques et la configuration.

L’objectif principal de Docker est de garantir qu’une application fonctionne de manière identique quel que soit l’environnement (développement, test, production), en supprimant les écarts liés aux configurations des machines.

À la différence des machines virtuelles, qui embarquent un système d’exploitation complet pour chaque instance, Docker repose sur la virtualisation au niveau du système d’exploitation. Les conteneurs partagent le noyau de la machine hôte, ce qui les rend beaucoup plus légers, plus rapides à démarrer et moins consommateurs en ressources.

Dans le cadre du développement logiciel moderne, Docker est un outil clé pour standardiser les environnements, faciliter le déploiement et améliorer la collaboration entre les équipes.

Éléments de preuve

J’ai découvert Docker pour la première fois lors de ma troisième année à l’ESIEA, au semestre 5, dans le cadre d’un cours théorique. Cette première approche m’a permis de comprendre les concepts de base de la conteneurisation, sans toutefois avoir l’opportunité de les mettre en pratique à ce moment-là.

C’est lors de mon stage chez EasyVista que j’ai pu utiliser Docker pour la première fois. Dans ce contexte, Docker était utilisé indirectement à travers Jenkins, qui permettait d’exécuter des tests automatisés à chaque commit sur GitHub. En tant que stagiaire front-end, je n’étais pas en charge de la configuration de l’infrastructure, mais j’ai utilisé cet environnement au quotidien pour valider mes développements. Cette expérience m’a permis de comprendre l’intérêt de Docker dans un pipeline d'intégration continue, notamment pour garantir des environnements de test reproductibles et fiables.

Suite à cette première exposition, et ayant perçu le potentiel de Docker, j’ai décidé de l'intégrer moi-même dans un projet étudiant lors du semestre 7 de ma quatrième année, il s'agit du projet Galactic Airlines. J’y ai mis en place une image Jenkins via un conteneur Docker afin de gérer les tests du projet. Cela m’a permis de passer d’un usage passif à une utilisation active de Docker, en comprenant concrètement comment configurer un service conteneurisé et l’intégrer dans un workflow de développement.

Dans le cadre de mon alternance chez AUXASPHERE SAS, j’ai évolué dans un environnement où Docker était au cœur de l’architecture du projet. l'application souveraine sur laquelle je travaillais reposait sur une architecture en microservices, où chaque fonctionnalité était isolée dans un conteneur distinct : un service pour le drive, un autre pour la messagerie, un pour les appels vidéo, etc.

Cette architecture s’inscrivait dans une logique de zero trust, visant à garantir que chaque service soit indépendant des autres. Ainsi, si un service rencontrait un problème, comme le drive par exemple, cela n’impactait pas le reste de l’application. Les différents services communiquaient entre eux via un gateway, assurant la gestion des échanges et la sécurité des flux.

Ces expériences m’ont permis de mieux comprendre les enjeux liés à la conteneurisation dans des architectures modernes, notamment en termes d’isolation, de scalabilité et de résilience des systèmes.

Auto-critique

Au fil de mes projets, j’ai acquis une bonne compréhension des bases de Docker, que je considère aujourd’hui d’un niveau autonome. Je suis capable de mettre en place un environnement conteneurisé, de configurer des services avec Docker-Compose et de comprendre les interactions entre les différents conteneurs.

Je suis également initié pour utiliser Docker dans un contexte de développement, notamment pour standardiser les environnements et faciliter le lancement de projets.

Cependant, je suis conscient que ma maîtrise reste encore partielle. Je n’ai pas encore une expérience approfondie sur des aspects plus avancés, tels que l'optimisation des images, la gestion fine des volumes, la sécurité des conteneurs ou encore l'orchestration à grande échelle en production.

Perspective d'Évolution

J’aimerais renforcer mes compétences sur Docker afin d’atteindre un niveau avancé voire expert, approfondir mes connaissances en me formant à travers diverses ressources comme des tutos sur internet mais surtout des livres tels que « Docker et Conteneurs » de Pierre Yves Cloux dont j’ai fait l’acquisition.

Dans le cadre de mon projet professionnel visant à devenir Tech Lead, la maîtrise de Docker représente un enjeu important. Elle me permettra de concevoir des architectures robustes, de faciliter le travail des équipes et d'assurer des déploiements fiables et reproductibles.

Je souhaite également développer mes compétences sur les outils complémentaires, comme Docker Swarm ou Kubernetes, afin d’être capable de gérer des environnements distribués plus complexes.

Enfin, je conseillerais aux développeurs de ne pas se limiter à une utilisation basique de Docker. Comprendre en profondeur son fonctionnement et ses bonnes pratiques est un réel atout dans le développement moderne, notamment dans des contextes de microservices et de déploiement continu.