Aperçu de Docker
Docker a été initialement un projet interne lancé par Solomon Hykes, le fondateur de dotCloud, une entreprise basée en France. C'était une innovation construite sur les années d'expérience technologique de dotCloud dans les services cloud et elle a été open-sourcée en mars 2013 sous la licence Apache 2.0. Le code principal du projet est maintenu sur GitHub, et le projet a été renommé Moby. Le projet Docker a ensuite rejoint la Linux Foundation et a établi l'Open Container Initiative (OCI).
Après avoir été open-sourcé, Docker a gagné une large attention et discussion, son projet GitHub accumulant plus de 67 000 stars et plus de 18 000 forks à ce jour. En raison de la popularité du projet Docker, dotCloud a décidé de se renommer Docker fin 2013. Docker a été initialement développé et implémenté sur Ubuntu 12.04, tandis que Red Hat a commencé à prendre en charge Docker à partir de RHEL 6.5, et Google a largement utilisé Docker dans ses produits PaaS.
Docker est développé avec Go, un langage de programmation introduit par Google, en tirant parti des technologies du noyau Linux telles que cgroups, namespaces et OverlayFS-type Union FS. Il encapsule et isole les processus au niveau du système d'exploitation, une forme de virtualisation au niveau du système d'exploitation. Comme les processus isolés sont indépendants de l'hôte et des autres processus isolés, on les appelle des conteneurs. L'implémentation initiale était basée sur LXC, mais à partir de la version 0.7, LXC a été supprimé et Docker a commencé à utiliser son propre libcontainer. À partir de la version 1.11, il a encore évolué pour utiliser runC et containerd.
Qu'est-ce que Docker
Docker est une plateforme ouverte pour développer, livrer et exécuter des applications. Docker vous permet de séparer vos applications de votre infrastructure afin que vous puissiez livrer rapidement des logiciels. Avec Docker, vous pouvez gérer votre infrastructure de la même manière que vous gérez vos applications. En tirant parti des méthodologies de Docker pour l'expédition, les tests et le déploiement de code, vous pouvez réduire considérablement le délai entre l'écriture du code et son exécution en production.
Pourquoi utiliser Docker
En tant que nouvelle méthode de virtualisation émergente, Docker offre de nombreux avantages par rapport aux approches de virtualisation traditionnelles.
Utilisation plus efficace des ressources Puisque les conteneurs ne nécessitent pas de virtualisation matérielle ou l'exécution d'un système d'exploitation complet, Docker utilise les ressources système plus efficacement. Que ce soit la vitesse d'exécution des applications, la consommation de mémoire ou la vitesse de stockage des fichiers, Docker surpasse les technologies de virtualisation traditionnelles. Par conséquent, par rapport à la technologie des machines virtuelles, un hôte avec la même configuration peut souvent exécuter plus d'applications.
Temps de démarrage plus rapide La technologie traditionnelle des machines virtuelles prend souvent des minutes pour démarrer un service d'application, tandis que les conteneurs Docker peuvent atteindre des temps de démarrage quasi instantanés, souvent en quelques secondes ou même millisecondes, car ils s'exécutent directement sur le noyau hôte sans avoir besoin d'un démarrage complet du système d'exploitation. Cela réduit considérablement le temps de développement, de test et de déploiement.
Environnement d'exécution cohérent Un problème courant lors du processus de développement est l'incohérence de l'environnement. En raison des différences entre les environnements de développement, de test et de production, certains bogues peuvent passer inaperçus lors du développement. Les images Docker fournissent un environnement d'exécution complet, à l'exception du noyau, assurant la cohérence de l'environnement d'exécution de l'application et empêchant le problème "mais ça marche sur ma machine".
Livraison et déploiement continus Pour les développeurs et le personnel des opérations (DevOps), le scénario idéal est de créer ou de configurer une fois et que cela fonctionne correctement partout.
Docker permet l'intégration continue, la livraison continue et le déploiement en personnalisant les images d'application. Les développeurs peuvent construire des images à l'aide de Dockerfiles et les intégrer avec des systèmes d'intégration continue pour les tests. Les équipes opérationnelles peuvent ensuite déployer rapidement ces images dans des environnements de production, en les intégrant même avec des systèmes de livraison/déploiement continus pour des déploiements automatisés.
L'utilisation de Dockerfiles rend la construction d'images transparente, permettant aux équipes de développement et d'exploitation de comprendre l'environnement d'exécution de l'application et les exigences de déploiement, facilitant ainsi un meilleur déploiement d'images en production.
Migration plus facile Puisque Docker assure la cohérence de l'environnement d'exécution, la migration d'applications devient plus simple. Docker peut s'exécuter sur diverses plateformes, notamment des machines physiques, des machines virtuelles, des clouds publics, des clouds privés et même des ordinateurs portables, avec des résultats cohérents. Les utilisateurs peuvent facilement migrer des applications s'exécutant sur une plateforme vers une autre sans s'inquiéter des changements d'environnement d'exécution empêchant l'application de fonctionner correctement.
Maintenance et extensibilité plus faciles La technologie de stockage par couches et d'images de Docker facilite la réutilisation des composants d'application dupliqués, simplifiant la maintenance et les mises à jour des applications. L'extension d'images basées sur des images de base devient également très simple. De plus, l'équipe Docker, ainsi que diverses équipes de projets open source, maintiennent une grande collection d'images officielles de haute qualité qui peuvent être utilisées directement dans des environnements de production ou comme base pour une personnalisation supplémentaire, réduisant considérablement le coût de création d'images de service d'application.
Architecture de Docker
Docker utilise une architecture client-serveur. Le client Docker communique avec le démon Docker, qui est responsable de la construction, de l'exécution et de la distribution de vos conteneurs Docker. Le client et le démon Docker peuvent s'exécuter sur le même système, ou vous pouvez connecter un client Docker à un démon Docker distant. Le client et le démon Docker communiquent à l'aide d'une API REST, sur des sockets UNIX ou une interface réseau. Un autre client Docker est Docker Compose, qui vous permet de travailler avec des applications constituées d'un ensemble de conteneurs.
Le démon Docker
Le démon Docker (dockerd) écoute les requêtes de l'API Docker et gère les objets Docker tels que les images, les conteneurs, les réseaux et les volumes. Un démon peut également communiquer avec d'autres démons pour gérer les services Docker.
Le client Docker
Le client Docker (docker) est le principal moyen pour de nombreux utilisateurs Docker d'interagir avec Docker. Lorsque vous utilisez des commandes telles que docker run, le client envoie ces commandes à dockerd, qui les exécute. La commande docker utilise l'API Docker. Le client Docker peut communiquer avec plus d'un démon.
Docker Desktop
Docker Desktop est une application facile à installer pour votre environnement Mac, Windows ou Linux qui vous permet de créer et de partager des applications et des microservices conteneurisés. Docker Desktop inclut le démon Docker (dockerd), le client Docker (docker), Docker Compose, Docker Content Trust, Kubernetes et Credential Helper. Pour plus d'informations, consultez Docker Desktop.
Les registres Docker
Un registre Docker stocke les images Docker. Docker Hub est un registre public que n'importe qui peut utiliser, et Docker recherche les images sur Docker Hub par défaut. Vous pouvez même exécuter votre propre registre privé.
Lorsque vous utilisez les commandes docker pull ou docker run, Docker extrait les images requises à partir de votre registre configuré. Lorsque vous utilisez la commande docker push, Docker pousse votre image vers votre registre configuré.
Les objets Docker
Lorsque vous utilisez Docker, vous créez et utilisez des images, des conteneurs, des réseaux, des volumes, des plugins et d'autres objets. Cette section est un bref aperçu de certains de ces objets.
Images
Une image est un modèle en lecture seule avec des instructions pour créer un conteneur Docker. Souvent, une image est basée sur une autre image, avec des personnalisations supplémentaires. Par exemple, vous pouvez créer une image basée sur l'image ubuntu, mais qui installe le serveur Web Apache et votre application, ainsi que les détails de configuration nécessaires pour faire fonctionner votre application.
Vous pouvez créer vos propres images ou vous pouvez seulement utiliser celles créées par d'autres et publiées dans un registre. Pour créer votre propre image, vous créez un Dockerfile avec une syntaxe simple pour définir les étapes nécessaires à la création de l'image et à son exécution. Chaque instruction dans un Dockerfile crée une couche dans l'image. Lorsque vous modifiez le Dockerfile et reconstruisez l'image, seules les couches qui ont changé sont reconstruites. C'est en partie ce qui rend les images si légères, petites et rapides, par rapport aux autres technologies de virtualisation.
Conteneurs
Un conteneur est une instance exécutable d'une image. Vous pouvez créer, démarrer, arrêter, déplacer ou supprimer un conteneur à l'aide de l'API Docker ou de l'interface de ligne de commande (CLI). Vous pouvez connecter un conteneur à un ou plusieurs réseaux, y attacher du stockage, ou même créer une nouvelle image basée sur son état actuel.
Par défaut, un conteneur est relativement bien isolé des autres conteneurs et de sa machine hôte. Vous pouvez contrôler le degré d'isolation du réseau, du stockage ou d'autres sous-systèmes sous-jacents d'un conteneur par rapport aux autres conteneurs ou à la machine hôte.
Un conteneur est défini par son image ainsi que par les options de configuration que vous lui fournissez lors de sa création ou de son démarrage. Lorsqu'un conteneur est supprimé, tous les changements apportés à son état qui ne sont pas stockés dans un stockage persistant disparaissent.