Séquence 3 : Architecture Docker
Docker est une plateforme open-source qui permet de créer, déployer et gérer des applications dans des conteneurs. Cet article explique en détail son architecture, ses composants clés, et leur interaction.
Pourquoi utiliser Docker ?
- Isolation : Chaque conteneur fonctionne de manière indépendante.
- Portabilité : Les applications s'exécutent de la même manière sur tous les environnements.
- Efficacité : Partage du noyau de l'hôte, contrairement aux machines virtuelles.
- Scalabilité : Facile à déployer et à mettre à l'échelle.
⭐ Difficulté : ★★★☆☆ (3/5)
✅ Pédagogique : Schémas clairs, exemples de code (Dockerfile, docker-compose.yml), et explications détaillées pour chaque composant.
⚠️ Technique : Concepts avancés (réseaux Docker, volumes, orchestration Swarm) et manipulation de la ligne de commande.
🔍 Vocabulaire : Termes comme *Docker Daemon*, *bind mounts*, *overlay network*, *Docker Compose*, ou *orchestration* nécessitent une familiarité avec les conteneurs et l’administration système.
📚 Prérequis recommandés
🐧 Connaissances en ligne de commande : Utilisation de `docker`, `docker-compose`, et gestion des services Linux.
💻 Expérience avec les conteneurs : Notions de base sur les images, conteneurs, et réseaux.
📂 Gestion de projets : Structure de fichiers, variables d’environnement, et automatisation de déploiements.
🖥️ Environnement technique : Docker installé, accès administrateur, et système compatible (Linux/Windows avec WSL2).
1. Vue d'ensemble de l'architecture docker
Docker repose sur une architecture client-serveur avec les composants suivants :
| Composant | Rôle | Exemple |
|---|---|---|
| Docker Daemon (`dockerd`) | Service en arrière-plan qui gère les objets Docker (conteneurs, images, etc.). | Gère les requêtes de l'API Docker. |
| Docker Client | Interface CLI pour interagir avec le démon. | Commande : docker run nginx |
| Docker Images | Modèles immuables pour créer des conteneurs. | nginx:latest ubuntu:22.04 |
| Docker Containers | Instances exécutables d'une image, isolées et légères. | Conteneur exécutant Nginx. |
| Docker Registry | Service de stockage et distribution d'images (ex. : Docker Hub). | docker pull ubuntu |
| Docker Networking | Permet la communication entre conteneurs et avec l'extérieur. | Réseau bridge ou overlay |
| Docker Storage | Gestion des données persistantes via des volumes ou des *bind mounts*. | docker volume create |
| Docker Compose | Outil pour gérer des applications multi-conteneurs via un fichier YAML. | Fichier: docker-compose.yml |
| Docker Swarm | Orchestration de conteneurs sur un cluster de nœuds. | docker swarm init |
2. Schéma de l'architecture Docker
Voici une représentation visuelle de l'architecture Docker :
- architecture_docker.txt
+---------------------+ +---------------------+ +---------------------+ | Docker Client | ----> | Docker Daemon | ----> | Docker Registry | | (CLI: docker run) | | (`dockerd`) | | (Docker Hub) | +---------------------+ +---------------------+ +---------------------+ | +---------------------+ +---------------------+ +---------------------+ | Docker Images | <---- | Docker Containers | ----> | Docker Volumes | | (ex: nginx\:latest | | (isolated, | | (persistent data) | | | | lightweight) | | | +---------------------+ +---------------------+ +---------------------+ | +---------------------+ +---------------------+ | Docker Networks | | Docker Compose | | (bridge, host, etc.)| | (multi-container | | | | apps) | +---------------------+ +---------------------+
3. Explications détaillées des composants
3.1. Docker Daemon (dockerd)
- Rôle : Gère tous les objets Docker (images, conteneurs, volumes, réseaux).
- Fonctionnement :
- Écoute sur un socket Unix (`/var/run/docker.sock`) ou une interface réseau.
- Exécute les commandes reçues du client Docker.
- Exemple :
sudo systemctl start docker # Démarre le démon Docker
3.2. Docker Client
- Rôle : Interface CLI pour envoyer des commandes au démon.
- Exemples de commandes :
docker pull ubuntu # Télécharge une image docker run -it ubuntu # Lance un conteneur interactif docker ps # Liste les conteneurs en cours
3.3. Docker Images
- Structure : Composées de couches en lecture seule.
- Exemple de `Dockerfile` :
FROM ubuntu:22.04 RUN apt update && apt install -y python3 COPY app.py /app/ CMD ["python3", "/app/app.py"]
3.4. Docker Containers
- Caractéristiques :
- Isolation : Chaque conteneur a son propre système de fichiers et processus.
- Léger : Partagent le noyau de l'hôte.
- Cycle de vie :
Créé → Démarré → Arrêté → Supprimé
3.5. Docker Networking
- Types de réseaux :
- bridge : Réseau privé par défaut pour les conteneurs sur le même hôte.
- host : Le conteneur utilise le réseau de l'hôte.
- overlay : Pour la communication entre conteneurs sur différents hôtes.
- Exemple :
docker network create mon_reseau
docker run --network=mon_reseau nginx
3.6. Docker Storage
- Volumes : Stockage persistant pour les données.
- Bind Mounts : Monte un répertoire de l'hôte dans le conteneur.
- Exemple :
docker volume create mon_volume docker run -v mon_volume:/data nginx
3.7. Docker Compose
- Fichier docker-compose.yml :
- docker-compose.yml
version: '3.8' services: web: image: nginx\:latest ports: - "80:80" db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example
- Commandes :
docker-compose up -d # Démarre les services docker-compose down # Arrête les services
3.8. Docker Swarm (Optionnel)
- Orchestration de conteneurs sur un cluster.
- Exemple :
docker swarm init docker service create --replicas 3 nginx
4. Exemple pratique : déploiement d'une application Web
Scénario
Déployer une application web avec Nginx et MySQL.
Étape 1 : Dockerfile
FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"]
Étape 2 : docker-compose.yml
- docker-compose.yml
version: '3.8' services: web: build: . ports: - "5000:5000" depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example volumes: - db_data:/var/lib/mysql volumes: db_data:
Étape 3 : Démarrer l'application
docker-compose up -d
5. Avantages de l'architecture Docker
| Avantage | Description |
|---|---|
| Isolation | Chaque conteneur est isolé, évitant les conflits entre applications. |
| Portabilité | Les conteneurs s'exécutent de la même manière sur tous les systèmes. |
| Efficacité | Partage du noyau de l'hôte, moins gourmand en ressources qu'une machine virtuelle. |
| Scalabilité | Facile à déployer et à mettre à l'échelle (avec Swarm ou Kubernetes). |
| Automatisation | Déploiement et gestion simplifiés via des fichiers de configuration. |
🔑 Points clés à retenir
L'architecture Docker offre une solution puissante pour développer, déployer et gérer des applications dans des environnements isolés et portables. Que vous soyez développeur, administrateur système ou DevOps, Docker simplifie la gestion des dépendances et des déploiements.