Qu’est-ce que Docker ?
Conseil
Ce contenu est un extrait du livre .NET Microservices Architecture for Containerized .NET Applications, disponible sur .NET Docs ou en tant que PDF téléchargeable gratuitement pour une lecture hors ligne.
Docker est un projet open source pour automatiser le déploiement d’applications en tant que conteneurs portables et autonomes qui peuvent s’exécuter sur le cloud ou localement. Docker est également une entreprise qui promeut et évolue cette technologie, travaillant en collaboration avec les fournisseurs cloud, Linux et Windows, y compris Microsoft.
Figure 2-2. Docker déploie des conteneurs à toutes les couches du cloud hybride.
Les conteneurs Docker peuvent s’exécuter n’importe où, localement dans le centre de données client, dans un fournisseur de services externe ou dans le cloud, sur Azure. Les conteneurs d’images Docker peuvent s’exécuter en mode natif sur Linux et Windows. Toutefois, les images Windows peuvent s’exécuter uniquement sur les hôtes Windows et les images Linux peuvent s’exécuter sur des hôtes Linux et des hôtes Windows (à l’aide d’une machine virtuelle Hyper-V Linux, jusqu’à présent), où l’hôte signifie un serveur ou une machine virtuelle.
Les développeurs peuvent utiliser des environnements de développement sur Windows, Linux ou macOS. Sur l’ordinateur de développement, le développeur exécute un hôte Docker où les images Docker sont déployées, y compris l’application et ses dépendances. Les développeurs qui travaillent sur Linux ou sur macOS utilisent un hôte Docker basé sur Linux et peuvent créer des images uniquement pour les conteneurs Linux. (Les développeurs travaillant sur macOS peuvent modifier du code ou exécuter l’interface CLI Docker à partir de macOS, mais à partir du moment de cette écriture, les conteneurs ne s’exécutent pas directement sur macOS.) Les développeurs qui travaillent sur Windows peuvent créer des images pour des conteneurs Linux ou Windows.
Pour héberger des conteneurs dans des environnements de développement et fournir des outils de développement supplémentaires, Docker fournit Docker Desktop pour Windows ou pour macOS. Ces produits installent la machine virtuelle nécessaire (l’hôte Docker) pour héberger les conteneurs.
Les conteneurs Windows fonctionnent avec deux types de runtime :
Les conteneurs Windows Server fournissent une isolation des applications via la technologie d’isolation des processus et des espaces de noms. Un conteneur Windows Server partage un noyau avec l’hôte de conteneur et tous les conteneurs s’exécutant sur l’hôte.
Hyper-V Conteneurs s’étendent sur l’isolation fournie par les conteneurs Windows Server en exécutant chaque conteneur dans une machine virtuelle hautement optimisée. Dans cette configuration, le noyau de l’hôte de conteneur n’est pas partagé avec les conteneurs Hyper-V, ce qui offre une meilleure isolation.
Les images de ces conteneurs sont créées de la même façon et fonctionnent de la même façon. La différence réside dans la façon dont le conteneur est créé à partir de l’image. L'exécution d'un conteneur Hyper-V nécessite un paramètre supplémentaire. Pour plus d’informations, consultez Conteneurs Hyper-V.
Comparaison des conteneurs Docker avec des machines virtuelles
La figure 2-3 montre une comparaison entre les machines virtuelles et les conteneurs Docker.
Machines virtuelles | Conteneurs Docker |
---|---|
Les machines virtuelles incluent l’application, les bibliothèques ou les fichiers binaires requis et un système d’exploitation invité complet. La virtualisation complète nécessite plus de ressources que la conteneurisation. | Les conteneurs incluent l’application et toutes ses dépendances. Toutefois, ils partagent le noyau du système d’exploitation avec d’autres conteneurs, s’exécutant en tant que processus isolés dans l’espace utilisateur sur le système d’exploitation hôte. (Ce n’est pas le cas des conteneurs Hyper-V, où chaque conteneur s’exécute sur une machine virtuelle spécifique.) |
Figure 2-3. Comparaison des machines virtuelles traditionnelles aux conteneurs Docker
Pour les machines virtuelles, il existe trois couches de base dans le serveur hôte, du bas en haut : infrastructure, système d’exploitation hôte et hyperviseur, et en plus de tout ce que chaque machine virtuelle possède son propre système d’exploitation et toutes les bibliothèques nécessaires. Pour Docker, le serveur hôte dispose uniquement de l’infrastructure et du système d’exploitation, ainsi que du moteur de conteneur, qui conserve le conteneur isolé mais partageant les services de système d’exploitation de base.
Étant donné que les conteneurs nécessitent beaucoup moins de ressources (par exemple, ils n’ont pas besoin d’un système d’exploitation complet), ils sont faciles à déployer et ils démarrent rapidement. Cela vous permet d’avoir une densité plus élevée, ce qui vous permet d’exécuter davantage de services sur la même unité matérielle, ce qui réduit les coûts.
En tant qu’effet secondaire de l’exécution sur le même noyau, vous obtenez moins d’isolation que les machines virtuelles.
L’objectif principal d’une image est qu’elle rend l’environnement (dépendances) identique entre différents déploiements. Cela signifie que vous pouvez le déboguer sur votre ordinateur, puis le déployer sur un autre ordinateur avec le même environnement garanti.
Une image conteneur est un moyen de empaqueter une application ou un service et de le déployer de manière fiable et reproductible. Vous pouvez dire que Docker n’est pas seulement une technologie, mais aussi une philosophie et un processus.
Quand vous utilisez Docker, vous n’entendez pas les développeurs dire : « Cela fonctionne sur mon ordinateur, pourquoi pas en production ? » Ils peuvent simplement dire : « Il s’exécute sur Docker », car l’application Docker empaquetée peut être exécutée sur n’importe quel environnement Docker pris en charge, et elle exécute la façon dont elle a été conçue pour toutes les cibles de déploiement (telles que Dev, QA, préproduction et production).
Une analogie simple
Peut-être qu’une analogie simple peut aider à saisir le concept de base de Docker.
Revenons dans le temps aux années 1950 pour un moment. Il n’y avait pas de traitement de texte, et les photocopieurs étaient utilisés partout (en quelque sorte).
Imaginez que vous êtes responsable de l’émission rapide de lots de lettres selon les besoins, pour les envoyer aux clients, à l’aide de papier et d’enveloppes réels, pour être remis physiquement à l’adresse de chaque client (il n’y avait aucun e-mail à l’époque).
À un moment donné, vous réalisez que les lettres ne sont qu’une composition d’un grand ensemble de paragraphes, qui sont choisis et organisés selon les besoins, selon l’objectif de la lettre, de sorte que vous concevez un système pour émettre rapidement des lettres, s’attendant à obtenir une augmentation importante.
Le système est simple :
Vous commencez par un jeu de feuilles transparentes contenant chacun un paragraphe.
Pour préparer un ensemble de lettres, vous choisissez les feuilles avec les paragraphes dont vous avez besoin, puis vous les empilez et les alignez afin qu'elles soient bien alignées et lisibles.
Enfin, vous placez l’ensemble dans le photocopieur et appuyez sur démarrer pour produire autant de lettres que nécessaire.
Par conséquent, simplifier, c’est l’idée principale de Docker.
Dans Docker, chaque couche est l’ensemble résultant des modifications qui se produisent dans le système de fichiers après l’exécution d’une commande, comme l’installation d’un programme.
Par conséquent, lorsque vous « examinez » le système de fichiers après la copie de la couche, vous voyez tous les fichiers inclus dans la couche lorsque le programme a été installé.
Vous pouvez considérer une image comme un disque dur en lecture seule auxiliaire prêt à être installé dans un « ordinateur » où le système d’exploitation est déjà installé.
De même, vous pouvez considérer un conteneur comme l'« ordinateur » avec le disque dur de l’image installé. Le conteneur, comme un ordinateur, peut être allumé ou désactivé.
Précédent suivante