Docker
Qu'est-ce que Docker ?
Docker est une plateforme logicielle open source utilisée pour créer, déployer et gérer des conteneurs d'applications virtualisées sur un système d'exploitation (OS) commun, avec un écosystème d'outils alliés. La technologie des conteneurs Docker a été lancée en 2013. À l'époque, Docker Inc. a été créée pour soutenir une édition commerciale du logiciel de gestion de conteneurs et être le principal sponsor d'une version open source. Mirantis a acquis les activités de Docker Enterprise en novembre 2019.
Docker offre aux développeurs de logiciels un moyen plus rapide et plus efficace de construire et de tester des parties conteneurisées d'une application logicielle globale. Cela permet aux développeurs d'une équipe de créer simultanément plusieurs éléments de logiciel. Chaque conteneur contient tous les éléments nécessaires à la construction d'un composant logiciel et garantit qu'il est construit, testé et déployé sans problème. Docker permet la portabilité lorsque ces conteneurs emballés sont déplacés vers différents serveurs ou environnements.
Comment fonctionne Docker
Docker conditionne, approvisionne et exécute des conteneurs. La technologie des conteneurs est disponible via le système d'exploitation : Un conteneur emballe le service d'application ou la fonction avec toutes les bibliothèques, les fichiers de configuration, les dépendances et les autres parties et paramètres nécessaires pour fonctionner. Chaque conteneur partage les services d'un système d'exploitation sous-jacent. Les images Docker contiennent toutes les dépendances nécessaires à l'exécution du code à l'intérieur d'un conteneur, de sorte que les conteneurs qui passent d'un environnement Docker à un autre avec le même système d'exploitation fonctionnent sans changement.
Docker utilise l'isolation des ressources dans le noyau du système d'exploitation pour faire fonctionner plusieurs conteneurs sur le même système d'exploitation. Cela diffère des machines virtuelles (VM), qui encapsulent un système d'exploitation entier avec un code exécutable au-dessus d'une couche abstraite de ressources matérielles physiques.
Docker a été créé pour fonctionner sur la plateforme Linux, mais il a été étendu pour offrir une meilleure prise en charge des systèmes d'exploitation autres que Linux, notamment Microsoft Windows et Apple OS X. Des versions de Docker pour Amazon Web Services (AWS) et Microsoft Azure sont disponibles.
Principaux cas d'utilisation de Docker
Bien qu'il soit techniquement possible d'utiliser Docker pour développer et déployer n'importe quel type d'application logicielle, il est surtout utile pour accomplir ce qui suit :
- Déployer des logiciels en continu. La technologie Docker et de solides pratiques DevOps permettent de déployer des applications conteneurisées en quelques secondes, contrairement aux applications traditionnelles volumineuses et monolithiques qui prennent beaucoup plus de temps. Les mises à jour ou les modifications apportées au code d'une application sont mises en œuvre et déployées rapidement lorsque l'on utilise des conteneurs qui font partie d'un pipeline plus large d'intégration continue/de livraison continue.
- Construire une architecture basée sur les microservices. Lorsqu'une architecture basée sur les microservices est plus avantageuse qu'une application traditionnelle monolithique, Docker est idéal pour le processus de construction de cette architecture. Les développeurs construisent et déploient plusieurs microservices, chacun dans son propre conteneur. Ils les intègrent ensuite pour assembler une application logicielle complète à l'aide d'un outil d'orchestration de conteneurs, tel que Docker Swarm.
- Migration d'applications patrimoniales vers une infrastructure conteneurisée. Une équipe de développement souhaitant moderniser une application logicielle existante peut utiliser Docker pour migrer l'application vers une infrastructure conteneurisée.
- Permettre des applications hybrides et multi-cloud. Les conteneurs Docker fonctionnent de la même manière, qu'ils soient déployés sur site ou qu'ils utilisent la technologie cloud. Par conséquent, Docker permet de déplacer facilement les applications vers les environnements de production et de test de différents fournisseurs de cloud computing. Une application Docker qui utilise plusieurs offres cloud peut être considérée comme hybride ou multi-cloud.
Architecture Docker : Composants et outils
Docker Community Edition est un logiciel libre, tandis que Docker Enterprise Edition est une version commercialisée proposée par Docker Inc. Docker se compose de divers éléments et outils qui permettent de créer, de vérifier et de gérer des conteneurs.
Le moteur Docker est la technologie sous-jacente qui gère les tâches et les flux de travail liés à la création d'applications basées sur des conteneurs. Le moteur crée un processus démon côté serveur qui héberge des images, des conteneurs, des réseaux et des volumes de stockage.
Le démon fournit également une interface de ligne de commande (CLI) côté client pour que les utilisateurs puissent interagir avec le démon via l'interface de programmation d'applications Docker. Les conteneurs créés par Docker sont appelés Dockerfiles. Les fichiers Docker Compose définissent la composition des composants dans un conteneur Docker.
Les autres composants et outils de l'architecture Docker sont les suivants :
- Docker Hub. Cet outil logiciel-service permet aux utilisateurs de publier et de partager des applications basées sur des conteneurs par l'intermédiaire d'une bibliothèque commune. Le service compte plus de 100 000 applications accessibles au public, ainsi que des registres de conteneurs publics et privés.
- Registre de confiance. Il s'agit d'un référentiel similaire à Docker Hub, mais avec une couche supplémentaire de contrôle et de propriété sur le stockage et la distribution des images de conteneurs.
- Docker Swarm. Il s'agit d'une partie du moteur Docker qui prend en charge l'équilibrage de la charge des clusters pour Docker. Les ressources de plusieurs hôtes Docker sont mises en commun dans Swarm pour agir comme un seul, ce qui permet aux utilisateurs d'étendre rapidement les déploiements de conteneurs à plusieurs hôtes.
- Plan de contrôle universel. Il s'agit d'une interface de gestion unifiée des clusters et des applications, basée sur le web.
- Compose. Cet outil est utilisé pour configurer des services d'application multiconteneurs, afficher l'état des conteneurs, diffuser des journaux et exécuter des processus mono-instance.
- Content Trust. Cet outil de sécurité est utilisé pour vérifier l'intégrité des registres Docker distants, par le biais de signatures d'utilisateurs et d'étiquettes d'images.
Versions et fonctionnalités majeures de Docker
Docker Enterprise 1.13, publié en janvier 2017, a ajouté une compatibilité ascendante pour la CLI afin de gérer les anciens démons Docker, ainsi que plusieurs commandes Docker pour gérer l'espace disque et les données plus efficacement. Quelques corrections de sécurité et de bugs ont également été ajoutées.
Parmi les autres améliorations apportées à Docker Enterprise en 2017, citons la prise en charge native de Kubernetes pour l'orchestration de conteneurs, en plus du mode Swarm de Docker. La prise en charge de l'ordinateur central IBM et de Windows Server 2016 a également été ajoutée pour que les utilisateurs puissent exécuter des clusters et des applications mixtes sur plusieurs systèmes d'exploitation.
Docker Enterprise Edition 2.0, publié en avril 2018, proposait une prise en charge multi-OS et multi-cloud pour les environnements hybrides.
Docker Enterprise 3.0, publié en 2019, a ajouté des mises à niveau de clusters de conteneurs bleu-vert et la possibilité de créer des applications multiservices basées sur des conteneurs et exécutées à partir de n'importe quel environnement. Parmi les autres nouvelles fonctionnalités, on peut citer :
- Docker Desktop Enterprise, qui permet aux développeurs de déployer des applications dans un environnement conforme à Kubernetes avec une intégration automatisée des pipelines et une gestion informatique centralisée.
- Docker Applications, un ensemble d'outils de productivité pour les développeurs.
- Docker Kubernetes Service, qui automatise la gestion et la mise à l'échelle des apps basées sur Kubernetes et assure la sécurité, le contrôle d'accès et la gestion automatisée du cycle de vie.
- Docker Enterprise as a Service, un service de conteneurs d'entreprise entièrement géré.
Avantages et inconvénients de Docker
Docker s'est imposé comme une plateforme standard de facto pour composer, créer, déployer, mettre à l'échelle et superviser rapidement les conteneurs sur les hôtes Docker. Outre le développement efficace d'applications conteneurisées, les autres avantages de Docker sont les suivants :
- Un degré élevé de portabilité pour que les utilisateurs puissent enregistrer et partager des conteneurs sur différents hôtes.
- Réduction de l'utilisation des ressources.
- Déploiement plus rapide que les VM.
Docker présente également des difficultés potentielles :
- Le nombre de conteneurs possibles dans une entreprise peut être difficile à gérer efficacement.
- L'utilisation des conteneurs évolue de l'hébergement virtuel granulaire à l'orchestration des composants et des ressources des applications. Par conséquent, la distribution et l'interconnexion d'applications composées de composants - qui peuvent impliquer des centaines de conteneurs éphémères - deviennent un obstacle majeur.
Ces dernières années, Docker a été supplanté par Kubernetes pour l'orchestration des conteneurs. Cependant, la plupart des offres Kubernetes exécutent en fait Docker en arrière-plan.
Sécurité Docker
Un problème historiquement persistant avec les conteneurs - et Docker, par extension - est la sécurité. Malgré une excellente isolation logique, les conteneurs partagent toujours le système d'exploitation de l'hôte. Une attaque ou une faille dans le système d'exploitation sous-jacent peut potentiellement compromettre tous les conteneurs fonctionnant au-dessus du système d'exploitation. Les vulnérabilités peuvent concerner l'accès et l'autorisation, les images de conteneurs et le trafic réseau entre les conteneurs. Les images Docker peuvent conserver l'accès root à l'hôte par défaut, bien que cela soit souvent repris des paquets de fournisseurs tiers.
Docker a régulièrement ajouté des améliorations de sécurité à la plateforme Docker, telles que l'analyse d'images, l'introduction sécurisée de nœuds, l'identité cryptographique des nœuds, la segmentation des clusters et la distribution sécurisée des secrets. La gestion des secrets Docker existe également dans Kubernetes ainsi que dans CISOfy Lynis, D2iQ et HashiCorp Vault. Divers outils d'analyse de la sécurité des conteneurs ont vu le jour, notamment Aqua Security et NeuVector de SUSE.
Certaines organisations exécutent des conteneurs à l'intérieur d'une machine virtuelle, bien que les conteneurs ne nécessitent pas de machines virtuelles. Cela ne résout pas le problème des ressources partagées, mais atténue l'impact potentiel d'une faille de sécurité.
Une autre solution consiste à utiliser des machines virtuelles à profil plus bas ou "micro", qui ne nécessitent pas les mêmes frais généraux qu'une machine virtuelle classique. Parmi les exemples, citons Amazon Firecracker, gVisor et Kata Containers. Avant tout, la mesure la plus courante et la plus recommandée pour garantir la sécurité des conteneurs est de ne pas exposer les hôtes de conteneurs à l'internet et de n'utiliser que des images de conteneurs provenant de sources connues.
La sécurité était également le principal argument de vente des alternatives à Docker, en particulier rkt (prononcé rocket) de CoreOS. Cependant, Docker a fait des progrès pour améliorer ses options de sécurité alors que, dans le même temps, l'élan pour ces alternatives de conteneurs s'est estompé.
Alternatives Docker, écosystème et standardisation
Il existe des outils tiers qui fonctionnent avec Docker pour des tâches telles que la gestion des conteneurs et la mise en grappe. L'écosystème Docker comprend un mélange de projets open source et de technologies propriétaires, tels que Kubernetes open source, l'emballage OpenShift propriétaire de Kubernetes de Red Hat et la distribution de Kubernetes de Canonical, appelée Kubernetes "pure" en amont. Docker est en concurrence avec des conteneurs d'application propriétaires tels que VMware vApp et des outils d'abstraction d'infrastructure, notamment Chef.
Docker n'est pas la seule plateforme de conteneurs disponible, mais elle reste le plus grand nom du marché des conteneurs. CoreOS rkt est réputé pour sa sécurité, avec la prise en charge de SELinux et la gestion de plateformes de confiance. Red Hat, qui appartient désormais à IBM, a acheté CoreOS et intégré ses fonctionnalités dans son architecture OpenShift. Cependant, rkt est désormais un projet archivé de la Cloud Native Computing Foundation.
Parmi les autres grandes plateformes de conteneurs, citons OpenVZ, la plus ancienne des plateformes de conteneurs système, développée à l'origine par Virtuozzo. OpenVZ combine la petite taille et la vitesse élevée des conteneurs standard avec la sécurité supplémentaire d'une couche de système d'exploitation abstraite.
Docker a également joué un rôle de premier plan dans une initiative visant à normaliser plus formellement l'emballage et la distribution des conteneurs, appelée Open Container Initiative, qui a été créée pour favoriser un format de conteneur et un environnement d'exécution communs. Plus de 40 fournisseurs du secteur des conteneurs sont membres de l'Open Container Initiative, dont AWS, Intel et Red Hat.
Enfin, Windows Server 2019 et Windows 10 offrent une prise en charge directe des conteneurs à l'aide de la fonction de conteneur Windows basée sur la technologie Docker.
Historique de la société Docker
Docker a été publié pour la première fois en tant que plateforme open source en mars 2013 sous le nom de dotCloud. Docker Engine 1.0 a été lancé en 2014. En 2016, Docker a intégré son orchestration Swarm à Docker Engine dans la version 1.12. L'objectif plus large de Docker était de développer son activité avec les conteneurs en tant que service, mais finalement, ces plans ont été dépassés par la montée en puissance de Kubernetes.
Docker Enterprise a été lancé en mars 2017. L'entreprise a également fait don de son utilitaire d'exécution de conteneur "containerd" à la Cloud Native Computing Foundation cette année-là.
En novembre 2019, Mirantis a acquis les produits et la propriété intellectuelle de Docker autour de Docker Engine. L'acquisition comprenait Enterprise, Docker Trusted Registry, Docker Universal Control Plane et Docker CLI, ainsi que le produit commercial Docker Swarm. Mirantis a d'abord indiqué qu'elle se concentrerait sur Kubernetes et qu'elle mettrait un terme au support de Docker Swarm, mais elle a ensuite réaffirmé son intention de le supporter et de développer de nouvelles fonctionnalités. Le reste de la société Docker Inc. se concentre désormais sur Docker Desktop et Docker Hub.
Depuis 2021, le service Desktop de Docker n'est plus disponible gratuitement pour les entreprises. L'utilisation de Desktop par les entreprises nécessite un plan d'abonnement payant. Toutefois, une version gratuite est disponible pour les particuliers et les petites entreprises.