3 derniers cours

This commit is contained in:
2026-03-11 15:12:05 +01:00
parent b27ba5e52a
commit dc2ad2babd
3 changed files with 1348 additions and 0 deletions

647
06_docker_compose.md Normal file

File diff suppressed because it is too large Load Diff

491
07_optional_recap.md Normal file
View File

@@ -0,0 +1,491 @@
---
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 :) !

210
08_docker-security.md Normal file
View File

@@ -0,0 +1,210 @@
---
marp: true
theme: default
paginate: true
header: "Sécurisation avancée des images Docker"
footer: "BUT2"
style: |
section {
font-size: 28px;
}
h1 {
color: #0066cc;
}
h2 {
color: #0099cc;
}
---
# Sécurisation avancée des images Docker
## Stratégies et outils pour une conteneurisation robuste
---
# Introduction
- **Approche holistique** nécessaire pour une protection efficace
- Combinaison de **bonnes pratiques** validées par l'industrie
- **Cycle de vie complet** : de l'image de base à l'exécution
---
# 1. Sélection et validation des images de base
## Types d'images et niveaux de confiance
- **Images officielles** : 68% de vulnérabilités en moins
- **Images minimalistes** : Alpine Linux (5MB), Distroless (sans shell)
- **Images certifiées** : Audits indépendants et signature numérique
```bash
docker scout recommendations my-image:latest
```
---
# 1. Sélection et validation des images de base (suite)
## Gestion des dépendances
- **SBOM** (Software Bill of Materials) pour tracer l'origine des composants
- Détection des licences non conformes et dépendances obsolètes
```bash
syft my-image:latest -o json > sbom.json
```
---
# 2. Hardening des Dockerfiles
## Architecture des builds sécurisés
- **Mode non-privilégié** :
```
USER 1001:2001 # UID/GID non-root
```
- **Builds multi-étapes** :
```dockerfile
FROM golang:1.21 AS builder
# Compilation
FROM gcr.io/distroless/base
# Runtime
```
---
# 2. Hardening des Dockerfiles (suite)
## Bonnes pratiques
- **Nettoyage des couches intermédiaires** :
```dockerfile
RUN apt-get update && apt-get install -y \
package1 \
package2 \
&& rm -rf /var/lib/apt/lists/*
```
---
# 3. Analyse des vulnérabilités
## Outils d'analyse continue
| Outil | Type | Avantages |
|-------|------|-----------|
| Trivy | SAST/DAST | Analyse OS packages et langages |
| Snyk | SCA | Correction automatisée des CVE |
| Clair | Dynamique | Surveillance en temps réel |
| Anchore | Politiques | Vérification CIS Benchmarks |
---
# 3. Analyse des vulnérabilités (suite)
## Intégration CI/CD
```yaml
# .github/workflows/security.yml
name: Security Scan
on: [push]
jobs:
trivy-scan:
steps:
- name: Scan image
uses: aquasecurity/trivy-action@master
with:
severity: HIGH,CRITICAL
exit-code: 1
```
---
# 3. Analyse des vulnérabilités (suite)
## Gestion des correctifs
- Rebuilds hebdomadaires pour appliquer les correctifs OS
- Patchs critiques en 24h via des processus d'urgence
- Analyse différentielle des SBOM pour identifier les changements
```json
{
"docker": {
"enabled": true,
"schedule": ["every weekend"]
}
}
```
---
# 4. Sécurité runtime
## Isolation au niveau du noyau
- Mécanismes SELinux/AppArmor pour renforcer l'isolation
- Profils personnalisés bloquant 89% des tentatives d'évasion
```bash
docker run --security-opt "apparmor=docker-custom" my-image
```
---
# 4. Sécurité runtime (suite)
## Gestion des secrets
- Intégration avec HashiCorp Vault pour éviter le stockage en clair
```dockerfile
RUN --mount=type=secret,id=db_pass \
export DB_PASSWORD=$(cat /run/secrets/db_pass) \
&& ./init-db.sh
```
- Politiques de rotation automatique des secrets
---
# 5. Gouvernance et conformité
## Adhésion aux standards OWASP Docker Top 10
| ID | Risque | Contrôle |
|----|--------|----------|
| D01 | Images vulnérables | Analyse SBOM + CVE |
| D02 | Runtime non durci | Profils AppArmor/SELinux |
| D03 | Secrets exposés | Intégration Vault |
- L'implémentation complète réduit les incidents de 76%
---
# 5. Gouvernance et conformité (suite)
## Automatisation IaC
- Templates Terraform pour appliquer des configurations sécurisées
- Intégration des politiques de gestion des secrets
```terraform
resource "docker_image" "secure" {
name = "my-image:${var.version}"
build {
context = "."
args = { USER_ID = 1001 }
}
}
```
---
# 6. Perspectives futures
- **Confidential Computing** : Exécution dans des enclaves SGX/SEV
- **SBOM dynamiques** : Tracking en temps réel des composants
- **MLOps Security** : Détection automatique des dérives de comportement
---
# Conclusion
- Sécurité Docker = **pratiques techniques + processus organisationnels**
- Adoption d'**outils modernes** (Trivy, Snyk, Vault)
- **Automatisation CI/CD** pour maintenir la productivité
- Innovations futures: **confidential computing** et **vérification cryptographique**