commit b27ba5e52ababf5d5ce106b3e5151399b550ba9c Author: Maxime Menault Date: Wed Mar 11 15:11:31 2026 +0100 5 premiers cours diff --git a/01_cours1.md b/01_cours1.md new file mode 100644 index 0000000..8c8601b --- /dev/null +++ b/01_cours1.md @@ -0,0 +1,190 @@ +--- +marp: true +theme: default +paginate: true +backgroundColor: #fff +footer: 'Histoire de la Virtualisation - 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; + } +--- + +# Docker +## Virtualisation + +--- + +# Programme +1. Histoire de la virtualisation +2. Virtualisation +3. Conteneurisation +4. Histoire de docker +5. Cas Docker + +--- + +# 1. L'Histoire de la Virtualisation +## Pourquoi et Comment nous en sommes arrivés là + +--- + +# Années 60 : Le problème des mainframes coûteux + +## Le Contexte +- Ordinateurs très chers (plusieurs millions de dollars) +- Temps d'utilisation précieux +- Une seule tâche à la fois + +## La Solution : IBM M44/44X (1964) +- Partager la puissance entre plusieurs utilisateurs +- Optimiser l'utilisation des ressources +- Permettre l'exécution simultanée de programmes + +--- + +# Années 70-80 : Le besoin de développement et test + +
+
+ +## Les Défis +- Développement de nouveaux systèmes d'exploitation +- Tests de logiciels +- Formation des utilisateurs + +
+
+ +## La Solution : VM/370 +- Environnements isolés pour le développement +- Possibilité de crasher sans impact +- Multiples configurations de test + +
+
+ +--- + +# Années 90 : L'arrivée des PC et le problème de compatibilité + + +
+
+ +## Nouveaux Besoins +- Exécuter d'anciens logiciels DOS +- Supporter plusieurs OS sur un même PC +- Tester des logiciels sur différents systèmes + +
+
+ +## La Solution : VMware +- Virtualisation sur PC standard +- Support de multiples OS +- Coût réduit par rapport aux mainframes +
+
+ +--- + +# Années 2000 : L'explosion d'Internet et des serveurs + + +
+
+ +## Problématiques +- Multiplication des serveurs physiques +- Coûts d'hébergement croissants +- Gaspillage de ressources + +
+
+ +## Solutions Émergentes +- Consolidation des serveurs +- Xen et virtualisation open source +- Début du "Green IT" +
+
+ +--- + +# Années 2010 : L'ère du Cloud Computing + +## Nouveaux Défis +- Besoin de scalabilité dynamique +- Réduction des coûts d'infrastructure +- Agilité et rapidité de déploiement + +## La Réponse +- Infrastructure as a Service (IaaS) +- Conteneurisation avec Docker +- Orchestration avec Kubernetes + +--- + +# Aujourd'hui : L'omniprésence de la virtualisation + +## Motivations Actuelles +- **Économiques** + - Optimisation des coûts + - Paiement à l'usage +- **Techniques** + - Déploiement rapide + - Haute disponibilité +- **Écologiques** + - Réduction de l'empreinte carbone + - Optimisation des ressources + +--- + +# Le Futur : Nouveaux défis, nouvelles solutions + +## Défis Émergents +- Edge Computing +- Efficacité énergétique +- Sécurité et isolation + +## Tendances +- Virtualisation assistée par IA +- Serverless Computing +- Virtualisation imbriquée + +--- + +# La Virtualisation : Une réponse à chaque époque + +
+
+ +## Évolution des besoins +1. Optimisation des coûts matériels +2. Flexibilité de développement +3. Compatibilité logicielle +4. Efficacité énergétique +5. Élasticité des ressources + +
+
+ +## Aujourd'hui +- Fondation du cloud computing +- Base des architectures modernes +- Pilier de la transformation numérique + +
+
\ No newline at end of file diff --git a/02_virtualisation.md b/02_virtualisation.md new file mode 100644 index 0000000..0243ec6 --- /dev/null +++ b/02_virtualisation.md @@ -0,0 +1,167 @@ +--- +marp: true +theme: default +paginate: true +backgroundColor: #fff +footer: 'Virtualisation - 2025' +style: | + section { + font-family: 'Arial', sans-serif; + } + h1 { + color: #2496ed; + } + h2 { + color: #384c54; + } +--- + + +# 2. Virtualisation +## Définition et concepts + +--- + +# Virtualisation + +* Serveur hôte +* Serveur privé virtuel +* Environnement isolé +* Système d'exploitation + +--- + +# Avantages + +* Utilisation optimale des ressources +* Installation, déploiement et migration facile +* Sécurisation et/ou Isolation d'un réseau +* Socle de base du Cloud Computing +* ... + +--- + +# Inconvénients + +* Parfois inadapté (Ex : I/O intense) +* Un recours à des machines puissantes +* Une complexité accrue de l'analyse d'erreurs +* ... + +--- + +# Terminologie + +* Le **système hôte (host)** est l'OS principal de l'ordianteur. +* Le **système invité (guest)** est l'OS installé à l'intérieur d'une machine virtuelle. +* Une **machine virtuelle (VM)** est un ordinateur virtuel qui utilise un sysètme invité. +* Un ordinateur est aussi appelé serveur privé virtuel +**(Virtuel Private Server ou VPS)** ou environnement virtuel (Virtual Environment ou VE). + +--- + +# Domaines de virtualisation + +* Virtualisation de serveurs +* Virtualisation des applications +* Virtualisation du stockage +* Virtualisation du réseau + +--- + +# Virtualisation de serveurs + +--- + +# Hyperviseurs de Type 1 +* **"Bare-metal"** – directement sur le matériel +* Un micro-noyau qui gère l'accès au matériel et donne l'illusion d'exclusivité aux invités +* Un des OS (OS privilégié) dispose d'interfaces de gestion vers l'hyperviseur + +![bg right:48% 90%](./assets/type1Hypervisor.png) + +--- + +# Hyperviseurs de Type 1 +* Exemples + * VmWare vSphere + * Microsoft Hyper-V + * Xen + * Oracle VM Server + * Citrix Xen Server + * KVM + * Le noyau linux est l'hyperviseur + +![bg right:48% 100%](./assets/type1Hypervisor2.png) + +--- + +# Hyperviseurs de Type 2 +* Un système dans un système +* Architecture hébergée + * L'hyperviseur est une couche d'abstraction +* Il est possible d'émuler plusieurs composants + * Adaptateur vidéo, processeur, adaptateur réseau + +![bg right:48% 90%](./assets/type2Hypervisor.png) + +--- + +# Hyperviseurs de Type 2 +* Exemples + * VmWare + * Workstation + * Fusion + * Player +* Oracle VirtualBox +* Microsoft VirtualPC +* QEMU + +![bg right:48% 100%](./assets/type2Hypervisor2.png) + +--- + +# Isolateur + +* Logiciel sur OS hôte +* Isolation des exécutions +* Exemple : + * chroot + * LXC + * Docker + +![bg right:48% 100%](./assets/isolateur.png) + +--- + +# Noyau en espace utilisateur + +* Exécution du noyau comme processus utilisateur +* Permet le développement et test de noyaux +* Exemples : + * User Mode Linux (UML) + * Colinux + * L4Linux +![bg right:48% 100%](./assets/noyaux.png) +--- + +# Noyau en espace utilisateur + +* Avantages : + * Débogage facilité du noyau + * Tests sécurisés + * Protection du système hôte +* Cas d'usage : + * Développement de noyaux + * Tests de modifications + * Expérimentation sécurisée +![bg right:48% 100%](./assets/noyaux.png) + +--- + +# Les usages + +* Hyperviseur de type 1 => Professionnel +* Hyperviseur de type 2 => Professionnel / Particulier +* Isolateur => Professionnel / Particulier +* Noyau en espace utilisateur => Développement de noyaux \ No newline at end of file diff --git a/03_histoire_docker.md b/03_histoire_docker.md new file mode 100644 index 0000000..f25c88d --- /dev/null +++ b/03_histoire_docker.md @@ -0,0 +1,98 @@ +--- +marp: true +theme: default +paginate: true +backgroundColor: #fff +footer: 'Histoire de la Conteneurisation - 2025' +style: | + section { + font-family: 'Arial', sans-serif; + } + h1 { + color: #2496ed; + } + h2 { + color: #384c54; + } +--- + +# L'Histoire de la Conteneurisation 🐳 +## Des racines Unix à la révolution Docker + +--- + +# Il était une fois... Unix (1979) 🌱 + +- Introduction de **chroot** dans Unix V7 +- Premier pas vers l'isolation des processus +- Comme une "prison virtuelle" pour les programmes + +![bg right:40% 20%](https://cdn.icon-icons.com/icons2/2699/PNG/512/unix_logo_icon_170924.png) + +--- + +# L'Ère des Expérimentations (1991-2006) 🔬 + +## Les Innovations Clés : + +- 1991 : Concept du "jail" par Bill Cheswick +- 2000 : FreeBSD jails - Version améliorée +- 2006 : **Google Process Containers** + - Gestion des ressources + - Base des futurs conteneurs + +![bg right:30% 60%](https://cdn.icon-icons.com/icons2/2699/PNG/512/google_logo_icon_169090.png) + +--- + +# La Naissance de LXC (2008) 🚀 + +## Linux Containers : + +- Premier système de conteneurisation complet +- Utilisation des : + - cgroups (Control Groups) + - Namespaces Linux +- Base technologique pour Docker + +![bg right:40% 50%](https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Linux_Containers_logo.png/120px-Linux_Containers_logo.png) + +--- + +# La Révolution Docker (2013) 🐋 + +## Un Changement de Paradigme : + +- Création par Solomon Hykes +- Standardisation des conteneurs +- Interface utilisateur simplifiée +- Écosystème riche : + - Docker Hub + - Docker Compose + - Docker Swarm + +![bg right:40% 80%](https://cdn.icon-icons.com/icons2/2699/PNG/512/docker_logo_icon_170244.png) + +--- + +# L'Ère de l'Orchestration (2015) ⚡ + +## Kubernetes et au-delà : + +- Lancement de Kubernetes par Google +- Creation de l'Open Container Initiative (OCI) +- Standardisation industrielle +- Multi-cloud et portabilité + +![bg right:40% 60%](https://cdn.icon-icons.com/icons2/2699/PNG/512/kubernetes_logo_icon_168359.png) + +--- + +# Impact sur l'Industrie 📈 + +## Transformation Digitale : + +- 74% d'adoption en entreprise +- Déploiement simplifié +- DevOps facilité +- Microservices popularisés \ No newline at end of file diff --git a/04_docker.md b/04_docker.md new file mode 100644 index 0000000..1d9f8dd --- /dev/null +++ b/04_docker.md @@ -0,0 +1,190 @@ +--- +marp: true +theme: default +paginate: true +backgroundColor: #fff +footer: 'Conteneurisation - Partie 1 - 2025' +style: | + section { + font-family: 'Arial', sans-serif; + } + h1 { + color: #2496ed; + } + h2 { + color: #384c54; + } +--- + +# 3. La conteneurisation +## Cas de docker + +--- + +# Conteneur + +* Environnement isolé +* Système hôte +* Fonctions de configuration +* Dépend de l'hôte/kernel + +--- + +# Les types de conteneurs + +* **System :** + * simule une **séquence de boot** complète avec +un **init process** ainsi que **plusieurs processus** (LXC, +OpenVZ). + +* **Process :** + * un conteneur **exécute un ou plusieurs processus** directement, en fonction de l'application conteneurisée (Docker, Rkt). + +--- + +# Notion importantes + +* Cgroups (Control Groups) +* Namespaces + +![bg right:65% 100%](assets/cgroups_namesspaces.png) + +--- + +# Les images + +* Point de départ +* Archives / Snapshot +* On ne refait pas la roue + +![bg right:60% 100%](./assets/images.png) + +--- + +# Le registre + +* Distributeur d’images +* Sécurité ? +* Docker Hub +* Exemple : + * ECS (AWS) + * Artifact Registry (Google Cloud) + +--- + +# L’empilement des couches (Layers) + +* Structure en couche +* Partage des couches + +![alt text](./assets/layers.png) + +--- + +# Cycle de Vie des Conteneurs Docker + +- Introduction au cycle de vie des conteneurs +- États possibles et transitions +- Commandes de gestion + ![bg right:48% 100%](./assets/lifecycle.png) + + +--- + +# États des Conteneurs Docker + +**Created** +- Conteneur créé mais pas encore démarré +- `docker create` + +**Running** +- Conteneur en cours d'exécution +- `docker run`, `docker start` +- Processus actifs à l'intérieur + + +--- + +# États des Conteneurs Docker + +**Paused** +- Conteneur en pause (processus gelés) +- `docker pause`, `docker unpause` + +**Stopped** +- Conteneur arrêté (processus terminés) +- `docker stop`, `docker kill` + +--- + +# Commandes Principales de Gestion + +**Création et Démarrage** +```bash +docker run # Crée et démarre un conteneur +docker start # Démarre un conteneur existant +``` + +**Gestion des États** +```bash +docker pause # Met en pause un conteneur +docker unpause # Reprend l'exécution +docker stop # Arrête proprement (SIGTERM) +docker kill # Arrête immédiatement (SIGKILL) +``` + +--- + +# Commandes Principales de Gestion + +**Suppression** +```bash +docker rm # Supprime un conteneur arrêté +docker rm -f # Force la suppression d'un conteneur +``` + +--- + +# Inspection et Débug + +**Commandes utiles** +```bash +docker ps # Liste les conteneurs en cours d'exécution +docker ps -a # Liste tous les conteneurs +docker logs # Affiche les logs du conteneur +docker exec # Exécute une commande dans un conteneur +docker stats # Affiche les statistiques d'utilisation +``` + +**Points importants** +- Un conteneur peut être redémarré (`docker restart`) +- Les données sont persistantes entre les redémarrages +- Les volumes permettent de persister les données même après suppression + + + +--- + +# TP1 + +--- + +# Le stockage + +* AUFS +* DeviceMapper +* OverlayFS +* Plugins +![bg right:65% 100%](./assets/stockage.png) + +--- + +# Les volumes + +* Persistance des données +* Indépendance vis à vis des conteneurs/layers +* Deux types de volume: + * Conteneur : data conteneur + * Hôte : dossier + +![bg right:60% 100%](./assets/volume.png) \ No newline at end of file diff --git a/05_networks_dockerfile.md b/05_networks_dockerfile.md new file mode 100644 index 0000000..044a826 --- /dev/null +++ b/05_networks_dockerfile.md @@ -0,0 +1,392 @@ +--- +marp: true +theme: default +paginate: true +backgroundColor: #fff +footer: 'Conteneurisation - Partie 2 - 2025' +style: | + section { + font-family: 'Arial', sans-serif; + } + h1 { + color: #2496ed; + } + h2 { + color: #384c54; + } +--- + +# Docker Networks & Dockerfile +### IUT Sénart-Fontainebleau +#### 2025 + +--- + +# Plan du cours +1. Docker Networks + - Types de réseaux + - Communication entre conteneurs + - Use cases et bonnes pratiques + - Exercices pratiques + +2. Dockerfile + - Construction d'images + - Multi-stage builds + - Optimisation et sécurité + - Cas pratiques + +--- + +# 1. Docker Networks + +## Pourquoi les réseaux Docker ? +- Isolation des conteneurs +- Communication sécurisée +- Simulation d'infrastructure +- Environnements multi-conteneurs +- Séparation des préoccupations + +--- + +# Types de réseaux Docker + +## Bridge (default) +- Réseau privé interne +- Communication entre conteneurs +- Port mapping pour accès externe +```bash +# Création d'un réseau bridge personnalisé +docker network create --driver bridge my-network + +# Lancement d'un conteneur sur ce réseau +docker run --network my-network --name web1 nginx + +# Inspection du réseau +docker network inspect my-network +``` + +--- + +# Types de réseaux Docker + +## Host +- Utilise la stack réseau de l'hôte +- Performance maximale +- Moins sécurisé +- Cas d'usage : haute performance nécessaire +```bash +# Lancement en mode host +docker run --network host nginx + +# Vérification des ports utilisés +ss -tunlp +``` + +--- + +# Types de réseaux Docker + +## None +- Aucune connectivité réseau +- Isolation totale +- Pour les traitements isolés +- Cas d'usage : scripts de traitement batch +```bash +# Isolation complète +docker run --network none nginx + +# Vérification de l'isolation +docker exec [container-id] ping 8.8.8.8 +``` + +--- + +# Communication entre conteneurs + +## Même réseau bridge +```bash +# Création du réseau +docker network create app-network + +# Déploiement d'une stack web +docker run -d --network app-network --name frontend nginx +docker run -d --network app-network --name backend api +docker run -d --network app-network --name db postgres + +# Test de communication +docker exec frontend ping backend +docker exec backend ping db +``` + +--- + +# DNS dans Docker + +## Service Discovery +- Résolution automatique des noms +- Service discovery intégré +- Facilite la mise à l'échelle + +```bash +# Communication par nom de service +http://backend:8080/api +http://db:5432 + +# Test de résolution DNS +docker exec frontend nslookup backend +docker exec frontend wget -qO- http://backend/health +``` + +--- + +# Inspection et Debug Réseau + +## Outils disponibles +```bash +# Voir les réseaux +docker network ls + +# Détails d'un réseau +docker network inspect bridge + +# Connecter/Déconnecter à chaud +docker network connect app-network container1 +docker network disconnect app-network container1 + +# Traces réseau +docker logs --follow container1 +``` + +--- + +# 2. Pourquoi des Dockerfiles ? + +## Problèmes résolus +- "Ça marche sur ma machine" +- Dépendances manquantes +- Versions différentes +- Configuration manuelle + +## Avantages +- Infrastructure as Code (IaC) +- Reproductibilité garantie +- Déploiement automatisé +- Tests cohérents +- Documentation vivante + +--- + +# Structure d'un Dockerfile Avancé + +```dockerfile +# Base image selection +FROM alpine:3.14 AS builder + +# Métadonnées détaillées +LABEL maintainer="name@example.com" \ + version="1.0" \ + description="Application web" \ + environment="production" + +# Variables d'environnement +ENV APP_HOME=/app \ + APP_USER=webuser \ + APP_ENV=prod +``` + +--- +```dockerfile +# Création utilisateur dédié +RUN adduser -D -h $APP_HOME $APP_USER + +# Installation des dépendances +RUN apk add --no-cache \ + nodejs \ + npm \ + git + +# Configuration du workdir +WORKDIR $APP_HOME + +# Copie et permissions +COPY --chown=$APP_USER:$APP_USER . . + +# Switch utilisateur +USER $APP_USER + +# Healthcheck +HEALTHCHECK --interval=30s --timeout=3s \ + CMD wget -q localhost:3000/health || exit 1 + +# Commande de démarrage +CMD ["node", "app.js"] +``` + +--- + +# Multi-stage builds + +## Exemple Complet +```dockerfile +# Stage 1: Build +FROM node:16 AS builder +WORKDIR /build +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +# Stage 2: Test +FROM builder AS tester +RUN npm run test +``` + +--- + +# Multi-stage builds + +## Exemple Complet + +```dockerfile +# Stage 3: Production +FROM nginx:alpine +COPY --from=builder /build/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf +``` + +--- + +# Optimisation des images + +## Techniques avancées +1. Utilisation de .dockerignore +```dockerignore +node_modules +*.log +.git +tests +docs +``` + +--- + +# Optimisation des images + +2. Ordonnancement des layers +```dockerfile +# Bon ordre (moins de rebuilds) +COPY package.json . +RUN npm install +COPY . . + +# Mauvais ordre (rebuilds fréquents) +COPY . . +RUN npm install +``` + +--- + +# Optimisation des images + +3. Nettoyage des caches +```dockerfile +RUN apt-get update && \ + apt-get install -y package && \ + rm -rf /var/lib/apt/lists/* +``` + +--- + +# Variables d'environnement et Secrets + +## Bonnes pratiques +```dockerfile +# Variables build-time +ARG VERSION=1.0 + +# Variables runtime +ENV APP_VERSION=${VERSION} \ + NODE_ENV=production + +# Usage avec arguments +docker build --build-arg VERSION=2.0 . +``` + + +--- + +# Variables d'environnement et Secrets + +## Secrets en production +```bash +# Utilisation de docker secrets +docker secret create db_password password.txt +docker service create --secret db_password ... +``` + +--- + +# Healthcheck Détaillé + +## Implémentation robuste +```dockerfile +HEALTHCHECK --interval=30s \ + --timeout=3s \ + --start-period=60s \ + --retries=3 \ + CMD wget -q --spider \ + http://localhost:80/health || exit 1 +``` + +## Monitoring +```bash +# Vérification status +docker inspect --format='{{.State.Health.Status}}' container +``` + +--- + +# Sécurité et Bonnes Pratiques + +## Sécurisation des conteneurs +- Utilisateur non-root +- Images officielles ou vérifiées +- Scan des vulnérabilités +- Mise à jour régulière des bases +- Principe du moindre privilège + +```dockerfile +# Exemple sécurisé +FROM alpine:3.14 +RUN adduser -D appuser +USER appuser +``` + +--- + +# Déploiement et Tests + +## Workflow complet +```bash +# Build avec tag +docker build -t app:latest . + +# Test local +docker run --rm app:latest + +# Publication +docker tag app:latest registry/app:latest +docker push registry/app:latest + +# Déploiement +docker pull registry/app:latest +docker run -d app:latest +``` + +--- + +# Questions & Travaux Pratiques + +Explication de quelques notions pour le TP + +Place aux exercices pratiques ! \ No newline at end of file