--- marp: true theme: default paginate: true backgroundColor: #fff footer: 'Récapitulatif Virtualisation et Docker - 2025' style: | 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
1. **Hyperviseur Type 1 (Bare-metal)** - Directement sur le matériel - Ex: VMware ESXi, Hyper-V 2. **Hyperviseur Type 2** - Sur un système d'exploitation - Ex: VirtualBox, VMware Workstation
3. **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 : 1. "Je télécharge une image" 2. "J'exécute les conteneurs" 3. "Je tape des commandes" 4. "Je stocke toutes les versions d'une image" Réfléchissez individuellement puis nous voterons ensemble ! --- # 💡 Solutions : Composants Docker 1. "Je télécharge une image" → **Registry** - Stockage centralisé des images 2. "J'exécute les conteneurs" → **Daemon** - Gère le cycle de vie des conteneurs 3. "Je tape des commandes" → **CLI** - Interface utilisateur en ligne de commande 4. "Je stocke les versions" → **Registry** - Système de tags et versions --- # 5. Commandes Docker Essentielles ## Gestion des conteneurs ```bash docker run # Créer et démarrer docker start # Démarrer docker stop # Arrêter docker rm # Supprimer ``` ## Images ```bash docker pull # Télécharger docker build # Construire docker push # Publier ``` --- # 🎯 Activité : Devine la Commande Pour chaque action, trouvez la commande Docker appropriée : 1. Voir tous les conteneurs, même ceux arrêtés 2. Supprimer tous les conteneurs arrêtés 3. Voir les logs d'un conteneur en temps réel 4. Lister toutes les images locales *Indice : Certaines commandes nécessitent des options particulières* --- # 💡 Solutions : Devine la Commande
1. Voir tous les conteneurs : ```bash docker ps -a ``` 2. Supprimer conteneurs arrêtés : ```bash docker container prune ```
1. Voir les logs en temps réel : ```bash docker logs -f [container] ``` 2. Lister les images : ```bash docker images ```
--- # 6. Dockerfile
## Structure de base ```dockerfile 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 : 1. L'image de base 2. Les dépendances Python 3. Le code source 4. Le port d'exposition 5. La commande de démarrage --- # 💡 Solutions : Construction Dockerfile ```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 ```yaml 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 : ```yaml version: '3' services: web: ___: nginx ports: - "___:80" db: image: ___ ___: - POSTGRES_PASSWORD=secret ``` --- # 💡 Solutions : Docker Compose
```yaml version: '3' services: web: image: nginx ports: - "8080:80" db: image: postgres environment: - POSTGRES_PASSWORD=secret ```
Explications : - `image: nginx` : Utilise l'image nginx officielle - `8080:80` : Mappe le port 8080 de l'hôte au port 80 du conteneur - `environment` : 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 : 1. "Tous les conteneurs d'un réseau bridge peuvent communiquer entre eux" 2. "Un conteneur en réseau host a sa propre interface réseau" 3. "Le réseau none isole complètement le conteneur" 4. "Les conteneurs peuvent être sur plusieurs réseaux en même temps" --- # 💡 Solutions : Vrai ou Faux Réseaux 1. VRAI : Les conteneurs sur un même réseau bridge peuvent communiquer 2. FAUX : Le réseau host partage l'interface réseau de l'hôte 3. VRAI : Le réseau none isole totalement le conteneur 4. 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 : 1. Suppression d'un conteneur avec un volume nommé 2. Montage du même volume sur deux conteneurs 3. Redémarrage d'un conteneur sans volume 4. Modification d'un fichier dans un bind mount --- # 💡 Solutions : Scénarios Volumes 1. **Suppression conteneur + volume nommé** - Le volume persiste - Les données sont conservées - Réutilisable par d'autres conteneurs 2. **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 3. **Redémarrage sans volume** - Perte des données - Retour à l'état initial - Important de planifier la persistance 4. **Modification bind mount** - Changements visibles des deux côtés - Synchronisation en temps réel - Utile pour le développement --- # Points Clés à Retenir 1. **Évolution** : De la virtualisation à la conteneurisation 2. **Docker** : Solution légère et portable 3. **Images** : Base de la conteneurisation 4. **Dockerfile** : Construction d'images 5. **Compose** : Orchestration simple 6. **Réseaux** : Communication entre conteneurs 7. **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 :) !