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).

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

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)              |
+---------------------+       +---------------------+
  • 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
  • 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
  • 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"]
  • 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é
  • 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
  • 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
  • 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
  • Orchestration de conteneurs sur un cluster.
  • Exemple :
  docker swarm init
  docker service create --replicas 3 nginx

Déployer une application web avec Nginx et MySQL.

FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
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:
docker-compose up -d
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.

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.



  • virtualisation/docker.txt
  • Dernière modification : 2025/11/26 09:56
  • de ronan