Docker

Ma définition

Docker est une technologie open source qui permet aux développeurs de créer et déployer des conteneurs. Les conteneurs sont des composants exécutables qui combinent le code source de l’application avec les bibliothèques et dépendances du système d’exploitation requises pour exécuter ce code en totale autonomie et dans n’importe quel environnement (Mac, Windows, Linux…).

En entreprise, Docker simplifie considérablement le processus de déploiement en assurant une cohérence entre les environnements de développement et de production. Le gros plus avec Docker, c’est que les applications peuvent être mises en ligne plus rapidement, tout en utilisant efficacement les ressources, ce qui est essentiel dans un système de déploiement continu.

1ère anecdote

Lors de mon cursus scolaire, j’ai participé à un projet visant à héberger les solutions des étudiants des filières « Ingénierie Logicielle » et « Système d’Information » sur le site groupe-aen.info, afin de les rendre accessibles aux étudiants et aux visiteurs du site. J’ai pu concevoir pour la filière « Ingénierie Logicielle » une image Docker permettant de déployer un conteneur contenant un front-end Angular via un serveur Apache, ainsi qu’une API en JEE avec Tomcat, les fichiers pouvant être facilement déposés via un web SFTP.

Ce projet m’a permis de travailler la conteneurisation pour faciliter un déploiement type que l’on pourrait retrouver dans le monde professionnel. Malgré plusieurs échecs initiaux, j’ai persévéré et réussi à configurer une image stable pour faire fonctionner les projets dans les conteneurs liés à cette dernière. Mon attention aux détails m’a permis de créer un système efficace et facilement maintenable dans le temps.

2ème anecdote

Dans le cadre d’un projet personnel pour m’entraîner à utiliser Docker, j’ai créé une image Docker pour héberger les sites web que j’avais développés en première année. L’idée était de déployer facilement chaque projet dans un conteneur contenant un serveur web Apache. J’ai également configuré une autre image Docker intégrant un service SFTP pour faciliter le transfert de fichiers entre mon ordinateur personnel et le serveur web. En utilisant des volumes partagés entre conteneurs, j’ai pu rendre les fichiers accessibles directement pour chaque conteneur, simplifiant ainsi la gestion et la mise à jour des sites hébergés.

Ce projet d’entraînement m’a permis de maîtriser les bases de la création de conteneurs Docker, comme la définition des volumes pour faire persister les données et l’exposition des ports pour l’accès à distance des sites et du SFTP. Grâce à cette approche, j’ai pu approfondir mes connaissances en déploiement de conteneurs avec Docker.

Mon autocritique

Je considère actuellement avoir un niveau solide de maîtrise de Docker, avec une bonne compréhension des bases de la conteneurisation et des principales fonctionnalités, comme les Dockerfile et Docker Compose.

Ma marge de progression se situe dans la gestion des réseaux dans une architecture complexe car jusqu’à maintenant, je n’ai travaillé que sur cinq ou six conteneurs en même temps, là où dans certaines entreprises je peux facilement me retrouver avec plusieurs dizaines de conteneurs en simultané.

La conteneurisation ne répond pas aux mêmes besoins dans tous les environnements. Par exemple, dans des environnements de production, la sécurité et l’isolation des conteneurs sont des aspects primordiaux. Un manque de rigueur dans les configurations réseaux ou dans la réalisation des images peut entrainer des failles de sécurité qui peuvent être catastrophiques pour l’entreprise.

La conteneurisation, dans mon rôle d’apprenti ingénieur systèmes, est essentielle pour tester et déployer des applications rapidement et efficacement. Docker facilite grandement les pratiques d’intégration continue (CI) et de déploiement continu (CD) qui sont des compétences cruciales aujourd’hui. J’utilise Docker régulièrement pour des configurations de test et pour simuler des environnements.

Cette technologie a suscité mon intérêt. Mon apprentissage de Docker a donc été très rapide. Ses documentations détaillées et sa communauté active ont été une aide précieuse. Avec le recul, je recommande aux débutants de commencer par se familiariser avec les Dockerfile et les concepts de base de conteneurisation avant de se lancer dans des outils plus avancés, comme Docker Compose et Kubernetes. Par exemple, en créant un conteneur avec un serveur web pour afficher un site web simple.

Mon évolution dans cette compétence

À moyen terme, je souhaite en apprendre davantage sur Kubernetes, l’orchestrateur le plus utilisé en entreprise pour la gestion d’applications conteneurisées. La maîtrise de Kubernetes me permettrait de gérer efficacement des clusters de conteneurs Docker.

Pour y parvenir, je prévois de suivre une formation sur « Apprendre les bases de Kubernetes » de Kubernetes afin d’apprendre à configurer, déployer et maintenir des applications multi-conteneurs dans un cluster, ainsi qu’à automatiser les déploiements en reproduisant des environnements types de développement et de production par exemple.

Réalisations en lien