Files
DEV_42_Docker/07_optional_recap.md
2026-03-11 15:12:05 +01:00

492 lines
8.6 KiB
Markdown

---
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
<div class="columns">
<div>
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
</div>
<div>
3. **Conteneurisation**
- Isolation au niveau OS
- Ex: Docker, LXC
</div>
</div>
---
# 3. La Révolution Docker
<div class="columns">
<div>
## Pourquoi Docker ?
- Portable
- Léger
- Rapide à déployer
- Cohérent entre environnements
</div>
<div>
## Concepts clés
- Images
- Conteneurs
- Registre (Docker Hub)
- Layers
</div>
</div>
---
# 🎯 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
<div class="columns">
<div>
1. Voir tous les conteneurs :
```bash
docker ps -a
```
2. Supprimer conteneurs arrêtés :
```bash
docker container prune
```
</div>
<div>
1. Voir les logs en temps réel :
```bash
docker logs -f [container]
```
2. Lister les images :
```bash
docker images
```
</div>
</div>
---
# 6. Dockerfile
<div class="columns">
<div>
## Structure de base
```dockerfile
FROM nginx:alpine
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 80
CMD ["npm", "start"]
```
</div>
<div>
## Bonnes pratiques
- Minimiser les layers
- Optimiser le cache
- Multi-stage builds
- Sécurité (non-root)
</div>
</div>
---
# 🎯 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
<div class="columns">
<div>
## Usage
```yaml
version: '3'
services:
web:
build: .
ports:
- "80:80"
db:
image: postgres
```
</div>
<div>
## Avantages
- Orchestration simple
- Configuration déclarative
- Environnements reproductibles
</div>
</div>
---
# 🎯 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
<div class="columns">
<div>
```yaml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
- POSTGRES_PASSWORD=secret
```
</div>
<div>
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
</div>
</div>
---
# 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 :) !