Introduction à Docker
Objectifs du chapitre
- Comprendre ce qu'est la conteneurisation
- Découvrir Docker et son écosystème
- Différencier conteneurs et machines virtuelles
- Comprendre l'architecture Docker
1 - Qu'est-ce que la Conteneurisation ?
Le problème historique
Avant les conteneurs, le déploiement d'applications posait de nombreux défis :
Développeur : "Ça marche sur ma machine !"
Ops : "Mais pas en production..."
Les causes courantes :
- Versions de dépendances différentes
- Configuration système variable
- Bibliothèques manquantes
- Environnements hétérogènes
La solution : les conteneurs
Un conteneur est une unité logicielle standardisée qui empaquète :
- Le code de l'application
- Les dépendances (bibliothèques, frameworks)
- La configuration
- L'environnement d'exécution
┌─────────────────────────────────────────────────┐
│ Conteneur Docker │
├───────────────────────────────────────────── ────┤
│ Application + Dépendances + Configuration │
│ ───────────────────────────────────────────── │
│ Isolation du système hôte │
└─────────────────────────────────────────────────┘
2 - Qu'est-ce que Docker ?
Définition
Docker est une plateforme open-source qui permet de :
- Construire des images conteneurisées
- Distribuer ces images via des registres
- Exécuter des conteneurs de manière isolée
Historique
| Année | Événement |
|---|---|
| 2013 | Création de Docker par Solomon Hykes (dotCloud) |
| 2014 | Docker 1.0 - Version stable |
| 2017 | Moby Project - Docker devient open-source |
| 2019 | Docker Desktop pour entreprises |
| 2023 | Docker reste le standard de facto |
L'écosystème Docker
┌──────────────────────────────────────────────────────────┐
│ Écosystème Docker │
├───────────────────────────────────────────────────────── ─┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Docker CLI │ │ Docker │ │ Docker │ │
│ │ │ │ Desktop │ │ Hub │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Docker │ │ Docker │ │ Docker │ │
│ │ Compose │ │ Swarm │ │ Registry │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘
3 - Conteneurs vs Machines Virtuelles
Architecture comparée
Machine Virtuelle (VM)
┌───────────┐ ┌───────────┐ ┌───────────┐
│ App A │ │ App B │ │ App C │
├───────────┤ ├───────────┤ ├───────────┤
│ Bins/Lib │ │ Bins/Lib │ │ Bins/Lib │
├───────────┤ ├───────────┤ ├───────────┤
│ Guest OS │ │ Guest OS │ │ Guest OS │
└───────────┴─┴───────────┴─┴───────────┘
┌─────────────────────────────────────────┐
│ Hyperviseur │
├─────────────────────────────────────────┤
│ Système Hôte │
├─────────────── ──────────────────────────┤
│ Infrastructure │
└─────────────────────────────────────────┘
Conteneur Docker
┌───────────┐ ┌───────────┐ ┌───────────┐
│ App A │ │ App B │ │ App C │
├───────────┤ ├───────────┤ ├───────────┤
│ Bins/Lib │ │ Bins/Lib │ │ Bins/Lib │
└───────────┴─┴───────────┴─┴───────────┘
┌─────────────────────────────────────────┐
│ Docker Engine │
├─────────────────────────────────────────┤
│ Système Hôte │
├─────────────────────────────────────────┤
│ Infrastructure │
└─────────────────────────────────────────┘
Tableau comparatif
| Caractéristique | VM | Conteneur |
|---|---|---|
| Démarrage | Minutes | Secondes |
| Taille | Go | Mo |
| Performance | ~95% | ~99% |
| Isolation | Forte (matériel) | Bonne (processus) |
| OS | Complet | Partagé |
| Densité | 10-20/serveur | 100+/serveur |
Quand utiliser quoi ?
Utilisez les VM quand :
- Isolation totale requise
- OS différents nécessaires
- Applications legacy non conteneurisables
Utilisez Docker quand :
- Microservices
- CI/CD rapide
- Scalabilité horizontale
- Environnements de développement
4 - Architecture de Docker
Les composants principaux
┌─────────────────────────────────────────────────────────────┐
│ Client Docker │
│ (docker build, run, pull...) │
└──────────────────────────┬──────────────────────────────────┘
│ REST API
▼
┌─────────────────────────────────────────────────────────────┐
│ Docker Daemon (dockerd) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Images │ │ Conteneurs │ │ Réseaux │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────────────────────────────┐ │
│ │ Volumes │ │ containerd │ │
│ └─────────────┘ └─────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Concepts clés
1. Docker Daemon (dockerd)
- Service qui gère les objets Docker
- Écoute les requêtes API
- Communique avec containerd
2. Docker Client (docker)
- Interface ligne de commande
- Envoie les commandes au daemon
- Peut communiquer avec plusieurs daemons
3. Docker Registry
- Stocke les images Docker
- Docker Hub (public)
- Registres privés (Harbor, GitLab, etc.)
4. Images
- Templates en lecture seule
- Construites à partir de Dockerfile
- Composées de couches (layers)
5. Conteneurs
- Instances exécutables d'images
- Isolés les uns des autres
- Éphémères par défaut
5 - Pourquoi Docker ?
Avantages clés
Avantages
1. Portabilité
- "Build once, run anywhere"
- Même comportement partout
2. Efficacité
- Démarrage rapide
- Utilisation optimale des ressources
3. Isolation
- Pas de conflits entre applications
- Sécurité renforcée
4. Scalabilité
- Réplication facile
- Orchestration avec Kubernetes/Swarm
5. DevOps
- CI/CD simplifié
- Infrastructure as Code
Cas d'usage
| Cas d'usage | Description |
|---|---|
| Développement | Environnements reproductibles |
| Tests | Isolation des tests, parallélisation |
| CI/CD | Build et déploiement automatisés |
| Microservices | Architecture modulaire |
| Migration Cloud | Portabilité multi-cloud |
6 - Docker Hub
Qu'est-ce que Docker Hub ?
Docker Hub est le registre public officiel de Docker :
- Plus de 8 millions d'images disponibles
- Images officielles maintenues par Docker
- Images communautaires
- Registres privés gratuits (limités)
Images populaires
| Image | Description | Pulls |
|---|---|---|
| nginx | Serveur web | 1B+ |
| postgres | Base de données | 500M+ |
| node | Runtime JavaScript | 500M+ |
| python | Interpréteur Python | 500M+ |
| redis | Cache in-memory | 500M+ |
Conventions de nommage
# Format
[registre/]utilisateur/image:tag
# Exemples
nginx # Image officielle, tag latest
nginx:1.25 # Image officielle, tag spécifique
bitnami/nginx # Image communautaire
mon-registre.io/app:v1.0 # Registre privé
7 - Premiers pas
Vérifier l'installation
# Version de Docker
docker --version
# Docker version 24.0.7, build afdd53b
# Informations système
docker info
# Tester avec Hello World
docker run hello-world
Sortie attendue
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image.
4. The Docker daemon streamed that output to the Docker client.
...
Résumé
| Concept | Description |
|---|---|
| Docker | Plateforme de conteneurisation |
| Image | Template en lecture seule |
| Conteneur | Instance exécutable d'une image |
| Registry | Stockage d'images (Docker Hub) |
| Daemon | Service qui gère Docker |
Points clés
- Docker résout le problème "ça marche sur ma machine"
- Les conteneurs sont plus légers et rapides que les VM
- Docker Hub fournit des milliers d'images prêtes à l'emploi
- L'architecture client-serveur permet une grande flexibilité
Exercices pratiques
- Expliquez la différence entre une image et un conteneur
- Citez 3 avantages des conteneurs par rapport aux VM
- Qu'est-ce que Docker Hub ?
- Décrivez le rôle du Docker Daemon