graph TB H[Hyperviseur] --> V[Machines Virtuelles] V --> R[Ressources Virtuelles] R --> CPU[vCPU] R --> RAM[vRAM] R --> DISK[vDisk] R --> NET[vNIC]
Introduction aux Conteneurs
Concepts et Historique de la Conteneurisation
Objectifs du cours
À l’issue de ce cours, vous devez être capables de :
- Comprendre l’évolution Physique → VM → Conteneurs
- Expliquer la différence entre machine virtuelle et conteneur
- Utiliser une image pour créer un conteneur
- Créer une image simple avec un Dockerfile
Ce cours est une introduction conceptuelle. Les pratiques et usages avancés seront abordés dans les TP et cours suivants.
Rappel minimal : Ordinateur et Système d’exploitation
Objectif Comprendre ce qui est virtualisé, partagé ou isolé.
Architecture simplifiée
Applications
────────────
Système d’exploitation (Kernel)
────────────
Matériel (CPU, RAM, Disque, Réseau)
Rôle du noyau (kernel)
- Gestion des processus
- Gestion de la mémoire
- Accès au matériel
- Sécurité et isolation
Toute application passe par le noyau pour accéder aux ressources.
Objectifs de la Virtualisation
La virtualisation répond à deux problèmes simples :
- comment mieux exploiter le matériel disponible ?
- comment isoler les applications ?
Historique de la Virtualisation
Ère Physique (1990–2000)
Infrastructure
- Serveurs dédiés mono-usage
- Faible utilisation CPU
- Scalabilité verticale uniquement
Contraintes
- Coûts élevés
- Déploiements lents
- Maintenance complexe
- Conflits de dépendances
Ère Virtuelle (2000–2010)
Technologies
- Hyperviseurs : VMware ESX, Hyper-V
- Open Source : KVM, Xen
Bénéfices
- Consolidation des serveurs
- Isolation forte
- Portabilité des VMs
- Haute disponibilité
Architecture de la Virtualisation
Une machine virtuelle embarque un OS complet.
Hyperviseurs et Technologies
CPU : Intel VT-x / AMD-V
Mémoire : EPT / NPT
I/O : SR-IOV, NVMe-oF
Stockage : VMDK, QCOW2, SAN
Type 1 (Bare Metal) : ex. VMware ESX
- Direct sur le matériel
- Performances élevées
Type 2 (Hosted) : ex. VirtualBox, VMware Workstation
- Sur OS existant
- Simplicité d’usage
Des Machines Virtuelles
graph TD HW[Hardware] --> ESX[Hyperviseur] ESX --> VM1[VM Linux] ESX --> VM2[VM Linux] ESX --> VM3[VM Windows]
- Chaque VM a son propre OS
- Isolation forte via l’hyperviseur
- Ressources allouées statiquement
- Démarrage lent et consommation mémoire élevée
Bilan sur les Machines Virtuelles
Avantages
- Isolation forte
- Snapshots
- Migration
Inconvénients
- OS complet par VM
- Démarrage lent
- Consommation mémoire
L’Émergence des Conteneurs (2010+)
Les conteneurs ne virtualisent pas une machine, mais isolent des processus.
Fonctionnalités clés du noyau Linux
Namespaces
- PID, Network, Mount, UTS
cgroups
- Limitation CPU
- Limitation mémoire
- Comptabilisation
Un conteneur est une illusion d’isolation contrôlée par le noyau.
Chronologie
timeline 2000 : FreeBSD Jails : premiers conteneurs OS-level 2007 : cgroups et Namespaces Linux : bases des conteneurs 2008 : LXC : premiers conteneurs Linux 2013 : Docker : popularisation des conteneurs 2017 : Kubernetes : orchestration 2020 : OCI Standards : image et runtime 2024 : CRI-O, Podman : alternatives à Docker
Machines Virtuelles vs Conteneurs
| Critère | VM | Conteneur |
|---|---|---|
| Isolation | “Matérielle” | Noyau |
| OS | Complet | Partagé |
| Démarrage | Minutes | Secondes |
| Taille | Go | Mo |
| Usage | Legacy | Cloud-native |
VM = virtualisation de machine Conteneur = virtualisation de processus
Philosophie et grands principes des conteneurs
Les conteneurs sont une approche d’isolation de processus plutôt qu’une virtualisation de machine.
Principes clés
Isolation Chaque conteneur a son propre espace de processus, réseau et système de fichiers.
Légèreté Pas d’OS complet : seulement les dépendances nécessaires à l’application.
Immutabilité Une image est un artefact immuable : le même contenu donne le même conteneur.
Éphémérité Un conteneur est conçu pour être démarré, arrêté, détruit rapidement.
Portabilité Une image fonctionne de manière identique partout (dev, test, prod, cloud).
Message central
Un conteneur est une unité de déploiement : un processus principal isolé, reproductible, portable et facilement orchestrable.
Docker et Conteneurs
Docker Inc. fondé en 2010
Docker est une plateforme complète qui popularise l’usage des conteneurs
Il fournit :
- Un format d’image
- Un système de build
- Un registre
- Une CLI simple
Docker n’est pas le conteneur Docker est un ensemble d’outils (maintenant basé sur des standards) .
Docker et standards OCI
Standardisation en 2015 (OCI)
- Image Specification
- Runtime Specification
- Distribution Specification
Alternatives à Docker
- Bas niveau
- runc : runtime de référence
- containerd : runtime de conteneurs
- Haut niveau
- CRI-O : runtime pour Kubernetes
- Podman : gestion
- Bas niveau
Concepts Fondamentaux
Image
- Template immuable
- Lecture seule
- Distribuable
- Couches de système de fichiers empilées
Conteneur
- Processus isolé
- Ressources limitées
- État éphémère
Utilisation d’une image
docker run --detach \
--name my_web_server \
--publish 8080:80 \
--volume /var/www:/usr/share/nginx/html \
nginxCe que fait réellement docker run
- Télécharge l’image depuis un registre
- Crée un système de fichiers isolé
- Configure réseau et volumes (stockage de données externes)
- Lance le processus principal
Création d’une image
- Définie via un fichier Dockerfile
- Instructions pour construire l’image
- Exemple simple pour une application Python
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]- Construire l’image avec la commande :
docker build -t myapp:0.1.0 .Une image n’est pas une VM Elle contient uniquement ce qui est nécessaire à l’application.
Gestion de base
docker image pull nginx
docker image ls
docker container ls -a
docker container rm webShell et inspection
docker run -it ubuntu
docker exec -it web bash
docker logs web
docker statsNettoyage
docker system prune
docker system prune -aComposants standards
Docker CLI
↓
Docker Engine
↓
containerd
↓
runc
↓
Linux Kernel
Orchestration (aperçu)
Docker Compose
- Développement
- Applications simples
Kubernetes
- Production
- Scalabilité
- Résilience
Docker Compose ≠ Kubernetes “en petit”
Conclusion
- Les conteneurs complètent la virtualisation
- Ils apportent rapidité, portabilité et standardisation
- Docker est un point d’entrée, pas une finalité
- Kubernetes s’impose comme standard d’orchestration
Un conteneur n’est pas un mini-serveur C’est un processus isolé et maîtrisé