Docker : définition
Docker désigne plusieurs éléments, à savoir un projet d'une communauté Open Source, les outils issus de ce projet Open Source, l'entreprise Docker Inc. qui constitue le principal soutien de ce projet, ainsi que les outils que l'entreprise prend officiellement en charge. Le fait que ce terme soit utilisé aussi bien pour désigner les technologies que l'entreprise peut prêter à confusion.
Voici les différentes définitions :
- Le logiciel Docker est une technologie de conteneurisation qui permet la création et l'utilisation de conteneurs Linux®.
- La communauté Open Source Docker a pour but d'améliorer ces technologies en faveur des utilisateurs.
- L'entreprise Docker Inc. s'appuie sur le travail de la communauté Docker pour développer ses produits. En échange, elle y contribue en renforçant la sécurité et en partageant ses avancées. Elle assure ensuite la prise en charge des technologies optimisées et renforcées pour les entreprises clientes.
Grâce à Docker, les conteneurs deviennent des machines virtuelles très légères et modulaires qui vous offrent une grande flexibilité pour créer, déployer, copier des conteneurs et les déplacer d'un environnement à un autre. Vos applications sont ainsi optimisées pour le cloud.
Fonctionnement de Docker
La technologie Docker utilise le noyau Linux ainsi que ses fonctionnalités (comme les Cgroups et les espaces de noms) pour séparer des processus afin qu'ils s'exécutent de manière indépendante. Cette indépendance reflète l'objectif des conteneurs : exécuter plusieurs processus et applications séparément les uns des autres afin d'optimiser l'utilisation de votre infrastructure tout en bénéficiant du même niveau de sécurité que celui des systèmes distincts.
Les outils de conteneurisation, dont Docker, fournissent un modèle de déploiement basé sur les images pour faciliter le partage d'une application ou d'un ensemble de services ainsi que toutes leurs dépendances dans plusieurs environnements. Docker automatise le déploiement de l'application (ou des ensembles combinés de processus qui la composent) dans l'environnement du conteneur.
Parce qu'ils sont créés à partir de conteneurs Linux, ces outils Docker sont faciles à utiliser et uniques. Ils offrent aux utilisateurs un accès sans précédent aux applications, un déploiement rapide et un contrôle des versions et de leur distribution.
Docker et conteneurs Linux : quelle est la différence ?
Même s'ils sont souvent confondus, Docker et les conteneurs Linux traditionnels sont deux choses bien différentes. À l'origine, la technologie Docker s'appuyait sur la technologie LXC (que beaucoup associent aux conteneurs Linux traditionnels), mais ce n'est plus le cas aujourd'hui. En effet, si LXC offrait une certaine légèreté en matière de virtualisation, elle présentait toutefois des lacunes dans l'expérience de développement et d'utilisation. La technologie Docker permet non seulement de gérer des conteneurs, mais aussi de faciliter leur création et leur conception, ainsi que de distribuer et de contrôler la version des images, entre autres.
Les conteneurs Linux traditionnels utilisent un système d'initialisation capable de gérer plusieurs processus, ce qui permet à plusieurs applications de s'exécuter comme une seule et unique application. La technologie Docker privilégie la division des applications en processus et fournit les outils pour le faire. Cette approche granulaire présente plusieurs avantages.
Avantages des conteneurs Docker
Modularité
Avec Docker, il est possible de séparer un élément d'une l'application afin de le modifier ou de le réparer sans arrêter toute l'application. En plus de cette approche basée sur les microservices, vous pouvez partager des processus entre différentes applications, de la même manière que dans une architecture orientée services (SOA).
Couches et contrôle de version des images
Chaque image Docker se compose de plusieurs séries de couches regroupées dans une seule image. Une nouvelle couche est créée à chaque modification de l'image ou lorsqu'un utilisateur exécute une commande telle que run ou copy.
Docker réutilise ces couches pour construire de nouveaux conteneurs, ce qui permet d'accélérer le processus de création. Les modifications intermédiaires sont partagées entre les images pour améliorer la vitesse, la taille et l'efficacité. Élément indissociable des couches, le contrôle de version permet d'obtenir un journal qui consigne toutes les modifications et vous offre ainsi un contrôle total sur vos images de conteneur.
Restauration
La restauration est sans doute l'un des plus grands avantages des couches. Puisque chaque image est composée de couches, si l'itération actuelle d'une image ne vous plaît pas, vous pouvez restaurer la version précédente. Cette fonction favorise le développement agile et vous aide à mettre en œuvre les pratiques d'intégration et de déploiement continus (CI/CD) au niveau des outils.
Déploiement rapide
Autrefois, l'installation, la mise en marche, le provisionnement et la mise à disposition du matériel prenaient plusieurs jours et impliquaient des efforts et des dépenses importants. Avec les conteneurs Doker, le déploiement s'effectue en quelques secondes seulement. En créant un conteneur pour chaque processus, vous pouvez partager rapidement tous vos processus avec les nouvelles applications. De plus, vous n'avez plus besoin de démarrer un système d'exploitation pour ajouter ou déplacer un conteneur, ce qui réduit considérablement le délai de déploiement. Ainsi, vous pouvez créer et éliminer les données de vos conteneurs facilement, à moindre coût, et sans inquiétude.
La technologie Docker propose donc une approche davantage tournée vers la granularité, le contrôle et les microservices, qui met l'accent sur l'efficacité.
Quelles sont les limites de la technologie Docker ?
Docker est capable de gérer des conteneurs uniques à lui seul. Plus vous utilisez de conteneurs et d'applications conteneurisées et fragmentées, plus la gestion et l'orchestration deviennent complexes. Au bout d'un moment, il est nécessaire de regrouper les conteneurs afin de fournir les services (réseau, sécurité, télémétrie, etc.) sur la totalité d'entre eux. C'est précisément à ce niveau qu'intervient la technologie Kubernetes.
La technologie Docker ne fournit pas les mêmes fonctionnalités UNIX que les conteneurs Linux traditionnels, notamment la possibilité d'utiliser des processus tels que cron ou syslog dans le conteneur, en parallèle à l'application. Elle ne permet pas non plus le nettoyage des processus petits-enfants une fois le processus enfant terminé. Pour remédier à ces lacunes, vous pouvez modifier le fichier de configuration et y ajouter ces fonctionnalités, mais cela n'est pas toujours évident au premier abord.
De plus, certains sous-systèmes et appareils Linux ne présentent pas d'espaces de noms. Il s'agit entre autres de SELinux, de Cgroups et d'autres appareils /dev/sd*. Cela signifie que si un pirate prenait le contrôle de ces sous-systèmes, l'hôte serait compromis. Afin de préserver sa légèreté, le noyau de l'hôte est partagé avec les conteneurs, ce qui ouvre une brèche de sécurité. Ce n'est pas le cas avec les machines virtuelles, car elles sont bien mieux isolées du système hôte.
Par ailleurs, le démon Docker peut également poser des problèmes de sécurité. En effet, pour utiliser et exécuter des conteneurs Docker, vous devrez probablement utiliser le démon Docker, un environnement d'exécution persistant pour les conteneurs. Celui-ci nécessite des privilèges root, il est donc important de surveiller l'accès à ces processus et de bien choisir leur emplacement. Par exemple, un démon local présente une surface d'attaque plus petite qu'un démon hébergé dans un emplacement public tel qu'un serveur web.