Explorons ensemble l’agencement de Docker et ses éléments indispensables.
Je pars du principe que vous possédez une familiarité de base avec Docker. Si ce n’est pas le cas, je vous encourage à consulter un article précédent sur le sujet.
Je crois que vous saisissez l’importance cruciale de Docker au sein de DevOps. Toutefois, derrière cet outil remarquable, il doit y avoir une architecture ingénieuse et bien pensée, n’est-ce pas ?
Mais avant de plonger dans les détails, permettez-moi de vous introduire aux systèmes de virtualisation, anciens et modernes.
Virtualisation : Approche Classique vs. Nouvelle Génération
Dans le passé, nous étions habitués à créer des machines virtuelles, chacune disposant de son propre système d’exploitation, ce qui monopolisait beaucoup d’espace et les rendait lourdes à manipuler.
À présent, avec la technologie des conteneurs Docker, un seul système d’exploitation est exploité, et les ressources sont partagées entre les différents conteneurs. Cela se traduit par une solution plus légère et un démarrage en quelques instants.
L’Architecture de Docker
Vous trouverez ci-dessous une représentation simplifiée de l’architecture Docker.
Permettez-moi de vous éclairer sur les composants qui forment l’architecture Docker.
Le Moteur Docker
Il s’agit du noyau central de tout le système Docker. Le moteur Docker est une application qui adopte une structure client-serveur. Il est installé sur la machine hôte et se compose de trois éléments fondamentaux :
- Serveur : Il s’agit du démon Docker, identifié comme dockerd. Il a la capacité de créer et de gérer des images Docker, des conteneurs, des réseaux, et bien plus.
- API Rest : Elle joue le rôle d’intermédiaire pour communiquer au démon Docker les actions à réaliser.
- Interface en ligne de commande (CLI) : C’est l’outil utilisé par l’utilisateur pour saisir les commandes Docker.
Le Client Docker
Les utilisateurs de Docker peuvent interagir avec celui-ci par le biais d’un client. Quand des commandes Docker sont émises, le client les transmet au démon dockerd, qui se charge de leur exécution. L’API Docker est l’outil utilisé par les commandes Docker. Le client Docker est capable de communiquer avec divers démons.
Les Registres Docker
C’est le lieu où sont stockées les images Docker. Il peut s’agir d’un registre Docker public ou d’un registre privé. Docker Hub est l’espace par défaut pour les images Docker, constituant le registre public de ses collections. Vous avez également la possibilité de mettre en place et de gérer votre propre registre privé.
Quand vous exécutez les commandes Docker Pull ou Docker Run, l’image Docker requise est extraite du registre spécifié. Inversement, lorsque vous utilisez la commande Docker Push, l’image Docker est sauvegardée dans le registre configuré.
Les Objets Docker
Lorsque vous travaillez avec Docker, vous utilisez des images, des conteneurs, des volumes et des réseaux; ce sont les objets Docker.
Images
Les images Docker sont des modèles en lecture seule contenant des instructions pour la création d’un conteneur Docker. L’image Docker peut être directement extraite d’un hub Docker ou servir de base à laquelle vous pouvez ajouter des directives pour obtenir une nouvelle image Docker modifiée. Vous pouvez aussi élaborer vos propres images Docker en utilisant un Dockerfile. Créez un Dockerfile avec toutes les instructions nécessaires à la création d’un conteneur et à son lancement; il générera votre image Docker personnalisée.
Une image Docker possède une couche de base en lecture seule et une couche supérieure qui peut être modifiée. Quand vous faites des changements dans un Dockerfile et que vous le reconstruisez, seule la portion modifiée est régénérée dans la couche supérieure.
Conteneurs
Après l’exécution d’une image Docker, un conteneur Docker est créé. Toutes les applications et leur environnement fonctionnent à l’intérieur de ce conteneur. L’API Docker ou la CLI vous permettent de démarrer, arrêter, ou supprimer un conteneur Docker.
Voici un exemple de commande pour exécuter un conteneur Docker Ubuntu :
docker run -i -t ubuntu /bin/bash
Volumes
Les données persistantes, générées et utilisées par les conteneurs Docker, sont stockées dans des volumes. Ils sont entièrement gérés par Docker, via l’API Docker ou la CLI Docker. Les volumes sont compatibles avec les conteneurs Windows et Linux. Il est toujours préférable de recourir aux volumes plutôt que de garder les données dans la couche modifiable d’un conteneur. Le contenu du volume perdure indépendamment du cycle de vie d’un conteneur, par conséquent, son utilisation n’augmente pas la taille du conteneur.
Vous pouvez vous servir de l’option -v ou –mount pour démarrer un conteneur en exploitant un volume. Dans cette commande d’exemple, le volume geekvolume est utilisé avec le conteneur toptips.fr.
docker run -d --name toptips.fr -v geekvolume:/app nginx:latest
Réseaux
La mise en réseau de Docker est un canal à travers lequel tous les conteneurs isolés interagissent. Il existe principalement cinq pilotes réseau dans Docker :
- Pont : C’est le pilote réseau par défaut pour un conteneur. Il est utilisé lorsque votre application fonctionne sur des conteneurs autonomes, c’est-à-dire lorsque plusieurs conteneurs communiquent avec le même hôte Docker.
- Hôte : Ce pilote élimine l’isolement réseau entre les conteneurs Docker et l’hôte Docker. Il est utilisé quand l’isolement réseau entre l’hôte et le conteneur n’est pas requis.
- Superposition : Ce réseau permet aux services Swarm de communiquer entre eux. Il est employé lorsque les conteneurs s’exécutent sur divers hôtes Docker ou quand les services Swarm sont composés de plusieurs applications.
- Aucun : Ce pilote désactive totalement la mise en réseau.
- macvlan : Ce pilote assigne une adresse MAC aux conteneurs, afin qu’ils soient perçus comme des périphériques physiques. Le trafic est acheminé entre les conteneurs via leurs adresses MAC. Ce réseau est utilisé lorsque vous souhaitez que les conteneurs ressemblent à un équipement physique, par exemple lors de la migration d’une configuration de machine virtuelle.
Conclusion
J’espère que ces explications vous ont donné un aperçu de l’architecture Docker et de ses éléments constitutifs essentiels. Explorez Docker pour en apprendre davantage, et si vous êtes intéressé par une formation pratique, je vous recommande ce Cours de maîtrise Docker.
Avez-vous trouvé cet article enrichissant ? Pourquoi ne pas le partager avec d’autres ?