Docker est un terme qui peut prêter à confusion. Il peut être utilisé pour désigner une entreprise, un projet de communauté en Open source ou encore un logiciel développé via ce projet en open source. Vous vous sentez un peu perdu ? Rassurez-vous, nous vous expliquons tout dans cet article.
Docker : quelques précisions pour commencer
Docker est avant tout un projet d’une communauté Open source. Il peut aussi être utilisé pour désigner Docker Inc. l’entreprise qui soutient ce projet. Tous les outils développés dans le cadre de ce projet sont aussi désignés par Docker. En d’autres termes, Docker fait référence à la technologie de conteneurisation permettant de créer et d’utiliser des conteneurs Linux. La communauté Open Source Docker est la communauté de développeurs permettant d’améliorer cette technologie et de la rendre disponible gratuitement à tous. L’entreprise Docker Inc. se base sur ce travail pour sécuriser la technologie et partager toutes ces avancées technologiques avec les utilisateurs. Nous allons plutôt nous attarder sur la technologie Docker.
Docker : une technologie de conteneur
La technologie Docker est un outil de conteneur. Pour mieux comprendre son fonctionnement, commençons par parler de ce qu’est un conteneur ou container en anglais. Un conteneur est un environnement permettant de séparer les applications et leurs dépendances pour éviter les interférences. L’objectif est de permettre une exécution séparée des processus et des applications pour optimiser l’utilisation de l’infrastructure. Avec cette technologie, on peut utiliser un conteneur comme une machine virtuelle à la fois légère et modulaire.
Comment fonctionne Docker ?
Comment Docker fonctionne-t-il pour séparer les processus et les permettre de s’exécuter de manière indépendante ? Il utilise le noyau Linux et ses différentes fonctionnalités comme les espaces de noms et les groupes de contrôle cgroups. Docker est associé à un modèle de déploiement basé sur une image. C’est ce qui lui permet de partager une application et ses différentes dépendances en plusieurs environnements. Cela permet aussi à Docker d’automatiser le déploiement de ses applications dans les conteneurs. Avec Docker, il devient plus simple de contrôler les différentes versions d’images et leur attribution.
Docker est conçu sur un conteneur Linux, ce qui explique sa singularité et sa convivialité. Il offre un large accès aux applications, tout en accélérant leur déploiement.
Quelle différence avec le conteneur Linux ?
Docker a été créé initialement sur la base de la technologie LXC. C’est cette technologie que les utilisateurs associent souvent aux conteneurs Linux habituels. LXC est un outil de virtualisation léger, mais qui n’offrait pas une expérience à la hauteur des attentes des développeurs et des utilisateurs de Docker. Docker s’en est d’ailleurs émancipé depuis. En réalité, il existe une différence entre Docker et les conteneurs Linux traditionnels. Les conteneurs Linux utilisent un système Init qui gère plusieurs processus à la fois. Dans ces conteneurs, les applications s’exécutent comme un bloc. Docker, lui, favorise la décomposition des applications en des processus bien distincts. En d’autres termes, Docker propose une approche granulaire des applications. Il fournit aussi aux utilisateurs tous les outils nécessaires pour permettre cette décomposition des applications.
Pourquoi choisir les conteneurs Docker ?
L’approche granulaire proposée par Docker présente de multiples avantages.
L’application est modulable
Docker décompose les applications. Cette technologie permet ainsi de réparer ou de réaliser une mise à jour d’une partie de l’application sans avoir à la désactiver entièrement. Il est aussi possible de partager les processus entre les applications, comme vous le feriez avec une SOA ou architecture orientée services.
Un meilleur contrôle des versions d’image
Un fichier image Docker est composé de plusieurs couches. Ces couches sont assemblées dans une seule image. Quand l’image est modifiée, une nouvelle couche est créée. À chaque fois qu’on exécute une commande telle que run ou copy, une nouvelle couche s’ajoute aux précédentes.
Docker utilise toutes ces couches pour créer de nouveaux conteneurs, ce qui a pour effet d’accélérer la construction. Les modifications intermédiaires sont partagées entre les différentes images. La vitesse, l’efficacité et la taille sont ainsi optimisées. Chaque changement entraîne une mise à jour automatique du journal des modifications. L’utilisateur peut ainsi contrôler plus librement les images du conteneur.
Une restauration de l’image au besoin
Le principal avantage de la superposition des couches est la possibilité de restaurer l’image en cas de besoin. Il est toujours possible de restaurer la version précédente de l’image en cas d’itération. Cela a pour effet de simplifier la mise en pratique d’intégration et de déploiement continus des outils.
Un déploiement rapide des conteneurs
Le déploiement d’un nouveau conteneur était un travail fastidieux. Il fallait mettre en place un nouveau matériel, l’approvisionner avant de le rendre disponible. Grâce aux conteneurs Docker, tout le processus est simplifié. Chaque processus étant assimilé à un conteneur, il est possible de lancer des processus similaires pour plusieurs applications. Il n’est pas nécessaire de redémarrer un système d’exploitation ou de déplacer un conteneur. Il est aussi plus simple de détruire ou de créer de nouvelles données dans les conteneurs, sans pour autant augmenter les coûts.
Les limites de Docker
Docker est efficace pour la gestion d’un conteneur unique. Toutefois, quand le nombre de conteneurs et d’applications augmentent, la gestion devient plus complexe. Pour profiter pleinement de Docker, il faudrait limiter le nombre de conteneurs à gérer. Il serait ainsi plus judicieux de regrouper certains conteneurs pour assurer une meilleure distribution des services, que ce soit en matière de télémétrie, de sécurité ou de réseau.
Avec Docker, il n’est pas possible de profiter des fonctionnalités proposées par les conteneurs Linux, tels que UNIX. Il n’est donc pas possible d’utiliser des processus cron ou syslog dans le conteneur. Cela limite le nettoyage des processus petits-enfants quand les processus enfants sont arrêtés.
Qu’en est-il de la sécurité ?
Certains sous-systèmes et périphériques Linux comme SELinux, cgroups, etc. n’appartiennent pas à un espace de noms. Ainsi, si un pirate arrive à prendre le contrôle du sous-système, l’hôte est compromis. Avec la technologie Docker, pour permettre à l’hôte de garder sa légèreté, le noyau est partagé avec les conteneurs. Cela crée une brèche au niveau de la sécurité. Il n’y a pas ce genre de problèmes avec les machines virtuelles habituelles puisqu’elles sont mieux isolées du système hôte.
Le Daemon Docker, qui est utilisé pour lire les données contenues dans un dockerfile, peut aussi poser quelques problèmes de sécurité. L’utilisation de Daemon Docker est recommandée puisqu’il s’exécute en permanence pour gérer les conteneurs. Pour fonctionner, il a besoin de privilèges root. Il est donc indispensable de bien surveiller l’emplacement et l’accès à ces processus. Pour plus de sécurité, il vaut mieux placer le Daemon Docker en local. S’il est placé sur un emplacement public comme un serveur web, il sera plus facile à pirater.
Vous souhaitez vous former au Big Data ? Retrouvez les formations Data Full Stack et Data Analyst qui vous forment aux métiers de Data Analyst, Data Scientist, Data Engineer et AI Scientist.
Merci pour votre lecture ! Si vous souhaitez lire nos prochains articles autour de la Data et de l’IA, vous pouvez nous suivre sur Facebook, LinkedIn et Twitter pour être notifié lorsqu’un nouvel article est publié !