Familiarisons-nous avec l’architecture Docker et ses composants essentiels.
Je suppose que vous avez une connaissance de base de Docker. Si ce n’est pas le cas, vous pouvez vous référer à cet article précédent.
Je pense que vous comprenez l’importance de Docker dans le DevOps. Maintenant, derrière cet outil fantastique, il doit y avoir une architecture étonnante et bien pensée. N’est-ce pas ?
Mais avant d’en parler, laissez-moi vous présenter les systèmes de virtualisation précédents et actuels.
Virtualisation traditionnelle et nouvelle génération
Auparavant, nous avions l’habitude de créer des machines virtuelles, et chaque VM avait un système d’exploitation qui prenait beaucoup de place et alourdissait le système.
Aujourd’hui, dans le cas du conteneur Docker, vous disposez d’un seul système d’exploitation et les ressources sont partagées entre les conteneurs. Il est donc léger et démarre en quelques secondes.
Architecture Docker
Vous trouverez ci-dessous un schéma simple de l’architecture Docker.
Laissez-moi vous expliquer les composants d’une architecture Docker.
Moteur Docker
Il s’agit de la partie centrale de l’ensemble du système Docker. Docker Engine est une application qui suit une architecture client-serveur. Il est installé sur la machine hôte. Il y a trois composants dans le moteur Docker :
- Leserveur: Il s’agit du démon Docker appelé dockerd. Il peut créer et gérer des images Docker. Les conteneurs, les réseaux, etc.
- Rest API: Elle est utilisée pour indiquer au démon docker ce qu’il doit faire.
- Interface de ligne de commande (CLI) : Il s’agit d’un client utilisé pour saisir les commandes Docker.
Client Docker
Les utilisateurs de Docker peuvent interagir avec Docker par l’intermédiaire d’un client. Lorsqu’une commande Docker est exécutée, le client l’envoie au démon Dockerd, qui l’exécute. L’API Docker est utilisée par les commandes Docker. Le client Docker peut communiquer avec plusieurs démons.
Registres Docker
Il s’agit de l’emplacement où les images Docker sont stockées. Il peut s’agir d’un registre Docker public ou d’un registre Docker privé. Docker Hub est l’emplacement par défaut des images Docker, le registre public de ses magasins. Vous pouvez également créer et exécuter votre propre registre privé.
Lorsque vous exécutez les commandes docker pull ou docker run, l’image docker requise est extraite du registre configuré. Lorsque vous exécutez la commande docker push, l’image docker est stockée dans le registre configuré.
Objets Docker
Lorsque vous travaillez avec Docker, vous utilisez des images, des conteneurs, des volumes, des réseaux ; tous ces éléments sont des objets Docker.
Images
Les images Docker sont des modèles en lecture seule contenant des instructions pour créer un conteneur Docker. L’image Docker peut être extraite d’un hub Docker et utilisée telle quelle, ou vous pouvez ajouter des instructions supplémentaires à l’image de base et créer une nouvelle image Docker modifiée. Vous pouvez également créer vos propres images Docker à l’aide d’un fichier Docker. Créez un fichier docker avec toutes les instructions pour créer un conteneur et exécutez-le ; il créera votre image docker personnalisée.
L’image Docker comporte une couche de base qui est en lecture seule, et la couche supérieure peut être écrite. Lorsque vous modifiez un dockerfile et que vous le reconstruisez, seule la partie modifiée est reconstruite dans la couche supérieure.
Conteneurs
Lorsque vous exécutez une image Docker, celle-ci crée un conteneur Docker. Toutes les applications et leur environnement s’exécutent à l’intérieur de ce conteneur. Vous pouvez utiliser l’API ou le CLI de Docker pour démarrer, arrêter et supprimer un conteneur Docker.
Vous trouverez ci-dessous un exemple de commande pour lancer un conteneur docker ubuntu :
docker run -i -t ubuntu /bin/bash
Volumes
Les données persistantes générées par Docker et utilisées par les conteneurs Docker sont stockées dans des volumes. Ils sont entièrement gérés par Docker via le CLI ou l’API Docker. Les volumes fonctionnent sur les conteneurs Windows et Linux. Plutôt que de conserver les données dans la couche inscriptible d’un conteneur, il est toujours préférable d’utiliser des volumes. Le contenu du volume existe en dehors du cycle de vie d’un conteneur, de sorte que l’utilisation d’un volume n’augmente pas la taille d’un conteneur.
Vous pouvez utiliser les drapeaux -v ou -mount pour démarrer un conteneur avec un volume. Dans cet exemple de commande, vous utilisez le volume geekvolume avec le conteneur geekflare.
docker run -d --name geekflare -v geekvolume:/app nginx:latest
Réseaux
Le réseau Docker est un passage par lequel tous les conteneurs isolés communiquent. Il existe principalement cinq pilotes de réseau dans Docker :
- Bridge: Il s’agit du pilote réseau par défaut pour un conteneur. Vous utilisez ce réseau lorsque votre application s’exécute sur des conteneurs autonomes, c’est-à-dire lorsque plusieurs conteneurs communiquent avec le même hôte Docker.
- Host: Ce pilote supprime l’isolation réseau entre les conteneurs docker et l’hôte docker. Il est utilisé lorsque vous n’avez pas besoin d’isolation réseau entre l’hôte et le conteneur.
- Overlay: Ce réseau permet aux services de l’essaim de communiquer entre eux. Il est utilisé lorsque les conteneurs s’exécutent sur différents hôtes Docker ou lorsque les services d’essaimage sont formés par plusieurs applications.
- None (Aucun) : Ce pilote désactive tous les réseaux.
- macvlan: Ce pilote attribue une adresse mac aux conteneurs pour les faire ressembler à des appareils physiques. Le trafic est acheminé entre les conteneurs par le biais de leurs adresses mac. Ce réseau est utilisé lorsque vous souhaitez que les conteneurs ressemblent à des dispositifs physiques, par exemple, lors de la migration d’une configuration de VM.
Conclusion
J’espère que cela vous a donné une idée de l’architecture de Docker et de ses composants essentiels. Naviguez autour de Docker pour en savoir plus et si vous êtes intéressé par une formation pratique, consultez ce cours Docker Mastery.