Architecture Docker
L'architecture Docker est basée sur un modèle client-serveur, qui comprend plusieurs composants clés pour assurer une construction, une gestion et une exécution efficaces des applications conteneurisées.
La conception architecturale de Docker permet aux développeurs d'empaqueter facilement une application avec toutes ses dépendances dans un conteneur portable et de l'exécuter de manière cohérente dans différents environnements.
Docker utilise un modèle d'architecture client-serveur (C/S), en utilisant des API distantes pour gérer et créer des conteneurs Docker.
Les conteneurs Docker sont créés à partir d'images Docker.
La relation entre les conteneurs et les images est similaire à la relation entre les objets et les classes en programmation orientée objet.
| Docker | Orienté objet |
|---|---|
| Conteneur | Object |
| Image | Classe |
Diagramme de l'architecture Docker

Flux de travail de l'architecture Docker
- Construire l'image: Utiliser
DockerfileCréer l'image. - Pousser l'image vers le registre: Téléverser l'image vers Docker Hub ou un registre privé.
- Récupérer l'image: via
docker pullRécupérer l'image depuis le registre. - Lancer le conteneur: Utiliser l'image pour créer et démarrer un conteneur.
- Gérer les conteneurs: Utiliser les commandes du client Docker pour gérer les conteneurs en cours d'exécution (par exemple, consulter les journaux, arrêter les conteneurs, vérifier l'utilisation des ressources, etc.).
- Réseau et stockage: Les conteneurs communiquent entre eux via les réseaux Docker, et les données sont persistées via les volumes Docker ou les montages bind.
Ensuite, plongeons dans les composants principaux de Docker et leurs mécanismes de fonctionnement.
1, Client Docker
Le client Docker est l'interface en ligne de commande (CLI) permettant aux utilisateurs d'interagir avec le démon Docker. C'est le principal moyen pour les utilisateurs d'interagir avec le système Docker. Les utilisateurs émettent des commandes via la CLI Docker, qui sont envoyées au démon Docker, et le démon exécute les opérations correspondantes.
- Fonctionnalités: Permet aux utilisateurs de communiquer avec le démon Docker en utilisant des commandes, telles que la création de conteneurs, la construction d'images, la consultation de l'état des conteneurs, etc.
- Mode d'interaction: Le client Docker communique avec le démon Docker via l'API REST ou des sockets Unix. L'outil en ligne de commande couramment utilisé est
docker, grâce auquel les utilisateurs peuvent émettre diverses commandes d'opération Docker.
Commandes courantes :
docker run: Exécuter un conteneur.docker ps: Lister les conteneurs en cours d'exécution.docker build: Construire une image Docker.docker exec: Exécuter des commandes dans le conteneur.
2, Démon Docker
Le démon Docker (généralementdockerd) est le cœur de l'architecture Docker, responsable de la gestion du cycle de vie des conteneurs, de la construction d'images, de la distribution d'images et d'autres tâches.
Le démon s'exécute généralement en tant que processus en arrière-plan, en attente des requêtes API du client Docker.
Fonctionnalités:
- Démarrer et arrêter les conteneurs.
- Construire, récupérer et pousser des images.
- Gérer la mise en réseau et le stockage des conteneurs.
- Démarrer, arrêter, consulter les journaux des conteneurs, etc.
- Communiquer avec les registres Docker pour gérer le stockage et la distribution des images.
Le démon Docker écoute les requêtes des clients Docker et exécute ces requêtes via l'API Docker. Le démon est responsable de la gestion des objets Docker tels que les conteneurs et les images, et démarre les conteneurs, supprime les conteneurs, modifie les configurations des conteneurs, etc., en fonction des paramètres de la requête.
Démarrer le démon Docker (généralement démarré automatiquement) :
sudo systemctl start docker
3, Docker Engine API
L'API Docker Engine est une interface RESTful fournie par Docker, permettant aux clients externes de communiquer avec le démon Docker. Grâce à cette API, les utilisateurs peuvent effectuer diverses opérations telles que démarrer des conteneurs, construire des images, consulter l'état des conteneurs, etc. L'API fournit une interface de requête HTTP et prend en charge les appels multiplateformes.
Fonctionnalités:
- Envoyez des requêtes HTTP au démon Docker pour gérer les conteneurs et les images.
- Fournit une interface RESTful, permettant d'interagir avec Docker par programmation.
Peut être accessible viacurlou d'autres clients HTTP pour accéder à l'API Docker Engine. Par exemple, interrogez la version actuelle du démon Docker :
curl --unix-socket /var/run/docker.sock http://localhost/version
4, Conteneurs Docker
Un conteneur est l'environnement d'exécution de Docker ; il s'agit d'un paquet logiciel léger, autonome et exécutable. Les conteneurs sont démarrés à partir d'images Docker et contiennent tout ce qui est nécessaire pour exécuter une application — des bibliothèques du système d'exploitation au code de l'application. À l'exécution, les conteneurs partagent le noyau du système d'exploitation avec d'autres conteneurs et la machine hôte, mais les systèmes de fichiers et les processus des conteneurs sont isolés les uns des autres.
Fonctionnalités:
- Fournit un environnement d'exécution isolé pour garantir un comportement cohérent des applications dans différents environnements.
- Les conteneurs sont temporaires et sont généralement détruits une fois les tâches terminées.
Le cycle de vie des conteneurs est géré par le démon Docker. Les conteneurs peuvent s'exécuter n'importe où, car ils ne dépendent pas de la configuration du système d'exploitation sous-jacent ; toutes les dépendances d'exécution sont déjà empaquetées dans l'image.
Démarrez un conteneur :
docker run -d ubuntu
5, Images Docker
Une image Docker est un modèle en lecture seule pour les conteneurs. Chaque image contient le système d'exploitation, l'environnement d'exécution, les bibliothèques, les variables d'environnement et le code de l'application nécessaires pour que l'application puisse s'exécuter. Les images sont statiques, et les utilisateurs peuvent démarrer des conteneurs à partir d'une image.
Fonctionnalités:
- Les images constituent la base de la création des conteneurs ; chaque conteneur utilise une image lorsqu'il est instancié.
- Les images sont en lecture seule. Lorsque différents conteneurs utilisent la même image, les couches du système de fichiers dans les conteneurs sont indépendantes.
Les images Docker peuvent êtredocker pullrécupérées depuis Docker Hub ou depuis un registre privé, ou peuvent êtredocker buildConstruites à partir d'un Dockerfile.
Récupérez l'image Ubuntu :
docker pull ubuntu
6. Registres Docker
Un registre Docker est un emplacement pour stocker des images Docker. Le registre public le plus couramment utilisé estDocker Hub. Les utilisateurs peuvent télécharger des images depuis Docker Hub et téléverser leurs propres images pour les partager avec d'autres. En plus des registres publics, les utilisateurs peuvent également déployer leurs propres registres Docker privés pour gérer les images au sein d'une entreprise.
Fonctionnalités:
- Stocker des images Docker.
- Fournir des fonctions pour téléverser et télécharger des images.
Docker Hub fournit un grand nombre d'images officielles et maintenues par la communauté, telles que Ubuntu, Nginx, MySQL, etc.
Poussez l'image vers Docker Hub :
docker push <username>/<image_name>
7, Docker Compose
Docker Compose est un outil pour définir et exécuter des applications Docker multi-conteneurs. Avec Compose, les utilisateurs peuvent utiliser un seuldocker-compose.ymlUn fichier de configuration définit plusieurs conteneurs (services), et ces conteneurs peuvent être démarrés avec une seule commande. Docker Compose est principalement utilisé pour développer, tester et déployer des applications multi-conteneurs.
Fonctionnalités:
- Définir et exécuter une application composée de plusieurs conteneurs.
- Configurer les services, réseaux et volumes de l'application via un fichier YAML.
Créer un simpledocker-compose.ymlfichier pour configurer une application contenant un service web et un service de base de données :
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
Démarrer tous les services définis par Compose :
docker-compose up
8, Docker Swarm
Docker Swarm est un outil de gestion de cluster et d'ordonnancement fourni par Docker. Il permet d'organiser plusieurs hôtes Docker (nœuds) en un cluster, et utilise l'outil de gestion de cluster Swarm pour ordonnancer et gérer les conteneurs. Swarm peut implémenter des fonctionnalités telles que l'équilibrage de charge des conteneurs, la haute disponibilité et la mise à l'échelle automatique.
Fonctionnalités:
- Gérer des clusters Docker multi-nœuds.
- Gérer le déploiement et la mise à l'échelle des conteneurs via l'ordonnanceur.
Initialiser un cluster Swarm :
docker swarm init
9, Réseaux Docker
Les réseaux Docker permettent aux conteneurs de communiquer entre eux et de se connecter au monde extérieur. Docker fournit plusieurs modes réseau pour répondre à différents besoins, tels quebridgeRéseau (par défaut),hostRéseaux etoverlayréseaux, etc.
Fonctionnalités:
- Gérer la communication réseau entre conteneurs.
- Prend en charge différents modes réseau pour s'adapter aux exigences de différents scénarios.
Créer un réseau personnalisé et connecter un conteneur au réseau :
docker network create my_network docker run -d --network my_network ubuntu
10. Volumes Docker
Les volumes Docker sont un mécanisme de persistance des données qui permet de partager des données entre conteneurs et qui est indépendant du cycle de vie du conteneur. Contrairement au système de fichiers du conteneur, le contenu d'un volume n'est pas perdu lorsque le conteneur est détruit, ce qui le rend adapté aux applications telles que les bases de données qui nécessitent un stockage persistant.
Fonctionnalités:
- Permettre le partage de données entre conteneurs.
- Garantir la persistance des données, indépendamment du cycle de vie du conteneur.
Créer et monter un volume :
docker volume create my_volume docker run -d -v my_volume:/data ubuntuautres extensions