492 lines
8.6 KiB
Markdown
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 :) !
|
|
|