8.6 KiB
marp, theme, paginate, backgroundColor, footer, style
| marp | theme | paginate | backgroundColor | footer | style |
|---|---|---|---|---|---|
| true | default | true | Récapitulatif Virtualisation et Docker - 2025 | section { font-family: 'Arial', sans-serif; } h1 { color: #2496ed; } h2 { color: #384c54; } .columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; } |
Récapitulatif : Virtualisation et Docker
Points Clé avant les vacances
1. Histoire de la Virtualisation (1960-2020)
Évolution chronologique
- 1960s : IBM M44/44X - Premiers pas vers le partage de ressources
- 1970s : VM/370 - Environnements isolés pour développement
- 1990s : VMware - Virtualisation sur PC standard
- 2000s : Cloud Computing et consolidation des serveurs
- 2010s : Conteneurisation et Docker
2. Types de Virtualisation
Approches principales
-
Hyperviseur Type 1 (Bare-metal)
- Directement sur le matériel
- Ex: VMware ESXi, Hyper-V
-
Hyperviseur Type 2
- Sur un système d'exploitation
- Ex: VirtualBox, VMware Workstation
- Conteneurisation
- Isolation au niveau OS
- Ex: Docker, LXC
3. La Révolution Docker
Pourquoi Docker ?
- Portable
- Léger
- Rapide à déployer
- Cohérent entre environnements
Concepts clés
- Images
- Conteneurs
- Registre (Docker Hub)
- Layers
🎯 Activité : Problèmes & Solutions Docker
Question à la salle
"Citez un problème que vous avez rencontré en développement qui aurait pu être résolu avec Docker"
Levez la main si vous avez déjà rencontré :
- Des problèmes de dépendances
- Des différences entre environnements
- Des conflits de versions
💡 Solutions : Problèmes & Solutions Docker
Problèmes courants et solutions Docker :
- "Ça marche sur ma machine" → Images Docker standardisées
- Conflits de versions → Conteneurs isolés
- Installation complexe → Dockerfile automatisé
- Dépendances incompatibles → Un conteneur par service
4. Architecture Docker
Composants essentiels
- Docker Engine : Moteur de conteneurisation
- Docker CLI : Interface en ligne de commande
- Docker Daemon : Service principal
- Docker Registry : Stockage des images
Isolation
- Namespaces
- Control Groups (cgroups)
🎯 Activité : Composants Docker
Je décris une action, devinez le composant responsable :
- "Je télécharge une image"
- "J'exécute les conteneurs"
- "Je tape des commandes"
- "Je stocke toutes les versions d'une image"
Réfléchissez individuellement puis nous voterons ensemble !
💡 Solutions : Composants Docker
-
"Je télécharge une image" → Registry
- Stockage centralisé des images
-
"J'exécute les conteneurs" → Daemon
- Gère le cycle de vie des conteneurs
-
"Je tape des commandes" → CLI
- Interface utilisateur en ligne de commande
-
"Je stocke les versions" → Registry
- Système de tags et versions
5. Commandes Docker Essentielles
Gestion des conteneurs
docker run # Créer et démarrer
docker start # Démarrer
docker stop # Arrêter
docker rm # Supprimer
Images
docker pull # Télécharger
docker build # Construire
docker push # Publier
🎯 Activité : Devine la Commande
Pour chaque action, trouvez la commande Docker appropriée :
- Voir tous les conteneurs, même ceux arrêtés
- Supprimer tous les conteneurs arrêtés
- Voir les logs d'un conteneur en temps réel
- Lister toutes les images locales
Indice : Certaines commandes nécessitent des options particulières
💡 Solutions : Devine la Commande
-
Voir tous les conteneurs :
docker ps -a -
Supprimer conteneurs arrêtés :
docker container prune
-
Voir les logs en temps réel :
docker logs -f [container] -
Lister les images :
docker images
6. Dockerfile
Structure de base
FROM nginx:alpine
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 80
CMD ["npm", "start"]
Bonnes pratiques
- Minimiser les layers
- Optimiser le cache
- Multi-stage builds
- Sécurité (non-root)
🎯 Activité : Construction Dockerfile
Construisons ensemble un Dockerfile pour une application web Python !
Quelles instructions devons-nous inclure pour :
- L'image de base
- Les dépendances Python
- Le code source
- Le port d'exposition
- La commande de démarrage
💡 Solutions : Construction Dockerfile
# Image de base Python
FROM python:3.9-slim
# Répertoire de travail
WORKDIR /app
# Installation des dépendances
COPY requirements.txt .
RUN pip install -r requirements.txt
# Code source
COPY . .
# Port
EXPOSE 5000
# Démarrage
CMD ["python", "app.py"]
7. Docker Compose
Usage
version: '3'
services:
web:
build: .
ports:
- "80:80"
db:
image: postgres
Avantages
- Orchestration simple
- Configuration déclarative
- Environnements reproductibles
🎯 Activité : Compléter le Docker Compose
Complétez les parties manquantes de ce docker-compose.yml :
version: '3'
services:
web:
___: nginx
ports:
- "___:80"
db:
image: ___
___:
- POSTGRES_PASSWORD=secret
💡 Solutions : Docker Compose
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
- POSTGRES_PASSWORD=secret
Explications :
image: nginx: Utilise l'image nginx officielle8080:80: Mappe le port 8080 de l'hôte au port 80 du conteneurenvironment: Définit les variables d'environnement
8. Réseaux Docker
Types
- Bridge (défaut)
- Host
- None
- User-defined
Communication
- Entre conteneurs
- Avec l'extérieur
- DNS intégré
🎯 Activité : Vrai ou Faux Réseaux
Main droite pour vrai, gauche pour faux :
- "Tous les conteneurs d'un réseau bridge peuvent communiquer entre eux"
- "Un conteneur en réseau host a sa propre interface réseau"
- "Le réseau none isole complètement le conteneur"
- "Les conteneurs peuvent être sur plusieurs réseaux en même temps"
💡 Solutions : Vrai ou Faux Réseaux
- VRAI : Les conteneurs sur un même réseau bridge peuvent communiquer
- FAUX : Le réseau host partage l'interface réseau de l'hôte
- VRAI : Le réseau none isole totalement le conteneur
- VRAI : Un conteneur peut être connecté à plusieurs réseaux
Explications détaillées pour chaque cas d'usage...
9. Volumes et Persistance
Types de stockage
- Volumes nommés
- Bind mounts
- tmpfs
Usages
- Données persistantes
- Configuration
- Partage entre conteneurs
🎯 Activité : Scénarios Volumes
Que se passe-t-il dans ces situations :
- Suppression d'un conteneur avec un volume nommé
- Montage du même volume sur deux conteneurs
- Redémarrage d'un conteneur sans volume
- Modification d'un fichier dans un bind mount
💡 Solutions : Scénarios Volumes
-
Suppression conteneur + volume nommé
- Le volume persiste
- Les données sont conservées
- Réutilisable par d'autres conteneurs
-
Même volume sur deux conteneurs
- Partage de données en temps réel
- Modifications visibles par tous
- Attention aux accès concurrents
💡 Solutions : Scénarios Volumes
-
Redémarrage sans volume
- Perte des données
- Retour à l'état initial
- Important de planifier la persistance
-
Modification bind mount
- Changements visibles des deux côtés
- Synchronisation en temps réel
- Utile pour le développement
Points Clés à Retenir
- Évolution : De la virtualisation à la conteneurisation
- Docker : Solution légère et portable
- Images : Base de la conteneurisation
- Dockerfile : Construction d'images
- Compose : Orchestration simple
- Réseaux : Communication entre conteneurs
- Volumes : Persistance des données
Questions ?
Rappel des ressources
- Documentation Docker officielle
- Docker Hub
- GitHub du cours
- Stack Overflow
Préparation des examens
Points d'attention
- Commandes de base
- Architecture Docker
- Dockerfile et bonnes pratiques
- Docker Compose
- Cas pratiques
- Réseaux et volumes
Merci de votre attention !
Bonnes vacances en avance :) !