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

8.6 KiB

marp, theme, paginate, backgroundColor, footer, style
marp theme paginate backgroundColor footer style
true default true Récapitulatif Virtualisation et Docker - 2025 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
  1. 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

docker run     # Créer et démarrer
docker start   # Démarrer
docker stop    # Arrêter
docker rm      # Supprimer

Images

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 :

    docker ps -a
    
  2. Supprimer conteneurs arrêtés :

    docker container prune
    
  1. Voir les logs en temps réel :

    docker logs -f [container]
    
  2. Lister les images :

    docker images
    

6. Dockerfile

Structure de base

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

# 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

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 :

version: '3'
services:
  web:
    ___: nginx
    ports:
      - "___:80"
  db:
    image: ___
    ___:
      - POSTGRES_PASSWORD=secret

💡 Solutions : Docker Compose

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

  1. Redémarrage sans volume

    • Perte des données
    • Retour à l'état initial
    • Important de planifier la persistance
  2. 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 :) !