Architecture Docker et ses composants pour les débutants

Familiarisons-nous avec l’architecture Docker et ses composants essentiels.

Je suppose que vous avez une compréhension de base de Docker. Sinon, vous pouvez vous référer à cet article précédent.

Je pense que vous comprenez l’importance de Docker dans DevOps. Or, 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, permettez-moi de vous présenter les systèmes de virtualisation précédents et actuels.

Virtualisation traditionnelle ou 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 le rendait lourd.

Maintenant, dans le cas du conteneur docker, vous avez 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 le schéma simple d’une architecture Docker.

Laissez-moi vous expliquer les composants d’une architecture docker.

Moteur Docker

C’est la partie centrale de l’ensemble du système Docker. Docker Engine est une application qui suit l’architecture client-serveur. Il est installé sur la machine hôte. Il y a trois composants dans le moteur Docker :

  • Serveur : il s’agit du démon docker appelé dockerd. Il peut créer et gérer des images Docker. Conteneurs, réseaux, etc.
  • API Rest : elle est utilisée pour indiquer au démon docker ce qu’il doit faire.
  • Interface de ligne de commande (CLI) : C’est un client qui est utilisé pour entrer des commandes docker.

Client Docker

Les utilisateurs de Docker peuvent interagir avec Docker via un client. Lorsque des commandes docker sont exécutées, le client les envoie au démon dockerd, qui les exécute. L’API Docker est utilisée par les commandes Docker. Le client Docker peut communiquer avec plusieurs démons.

Registres Docker

C’est 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 ; ce sont tous des objets Docker.

Images

Les images Docker sont des modèles en lecture seule avec 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 Dockerfile. Créez un dockerfile avec toutes les instructions pour créer un conteneur et l’exécuter ; il créera votre image docker personnalisée.

L’image Docker a 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

Après avoir exécuté une image Docker, elle 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 Docker ou la CLI pour démarrer, arrêter, supprimer un conteneur Docker.

Vous trouverez ci-dessous 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 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 docker CLI ou Docker API. 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 pour cela. Le contenu du volume existe en dehors du cycle de vie d’un conteneur, donc l’utilisation du volume n’augmente pas la taille d’un conteneur.

Vous pouvez utiliser l’indicateur -v ou –mount pour démarrer un conteneur avec un volume. Dans cet exemple de commande, vous utilisez le volume geekvolume avec le conteneur toptips.fr.

docker run -d --name toptips.fr  -v geekvolume:/app nginx:latest

Réseaux

La mise en réseau Docker est un passage par lequel tous les conteneurs isolés communiquent. Il existe principalement cinq pilotes réseau dans docker :

  • Pont : il s’agit du pilote réseau par défaut d’un conteneur. Vous utilisez ce réseau lorsque votre application s’exécute sur des conteneurs autonomes, c’est-à-dire plusieurs conteneurs communiquant avec le même hôte docker.
  • Hôte : 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.
  • Superposition : ce réseau permet aux services Swarm de communiquer entre eux. Il est utilisé lorsque les conteneurs s’exécutent sur différents hôtes Docker ou lorsque les services Swarm sont formés par plusieurs applications.
  • Aucun : ce pilote désactive toute la mise en réseau.
  • macvlan : ce pilote attribue une adresse mac aux conteneurs pour les faire ressembler à 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 périphérique physique, par exemple lors de la migration d’une configuration de machine virtuelle.
  • Conclusion

    J’espère que cela vous donne une idée de l’architecture 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 ceci Cours de maîtrise Docker.

    Vous avez apprécié la lecture de l’article ? Que diriez-vous de partager avec le monde ?