Introduction aux Conteneurs

Concepts et Historique de la Conteneurisation

Université de Toulon

LIS UMR CNRS 7020

2026-01-28

Environnement et reproductibilite

Jupyter Kernel: zsh

đŸ–„ïž Env Ubuntu 24.04.3 LTS / x86_64 ‱ 🐳 Docker Client 29.1.5 / Server 29.1.5 ‱ 🌿 Git Branch @ 7b914bd

Ce support a été généré par Quarto : les cellules sont exécutées par le noyau indiqué lors du rendu.

Certaines parties ont Ă©tĂ© rĂ©digĂ©es avec l’assistance d’un modĂšle de langage ; le contenu a Ă©tĂ© relu et validĂ© par l’auteur.

Objectifs du cours

À l’issue de ce cours, vous devez ĂȘtre capables de :

  • Comprendre l’évolution Physique → VM → Conteneurs
  • Expliquer la diffĂ©rence entre machine virtuelle et conteneur
  • Utiliser une image pour crĂ©er un conteneur
  • CrĂ©er une image simple avec un Dockerfile

Ce cours est une introduction conceptuelle. Les pratiques et usages avancés seront abordés dans les TP et cours suivants.

Rappel minimal : Ordinateur et Systùme d’exploitation

Objectif Comprendre ce qui est virtualisé, partagé ou isolé.

Architecture simplifiée

Applications
────────────
Systùme d’exploitation (Kernel)
────────────
Matériel (CPU, RAM, Disque, Réseau)

RĂŽle du noyau (kernel)

  • Gestion des processus
  • Gestion de la mĂ©moire
  • AccĂšs au matĂ©riel
  • SĂ©curitĂ© et isolation

Astuce

Toute application passe par le noyau pour accéder aux ressources.

Objectifs de la Virtualisation

La virtualisation répond à deux problÚmes simples :

  • comment mieux exploiter le matĂ©riel disponible ?
  • comment isoler les applications ?

Historique de la Virtualisation

Ère Physique (1990–2000)

  • Infrastructure

    • Serveurs dĂ©diĂ©s mono-usage
    • Faible utilisation CPU
    • ScalabilitĂ© verticale uniquement
  • Contraintes

    • CoĂ»ts Ă©levĂ©s
    • DĂ©ploiements lents
    • Maintenance complexe
    • Conflits de dĂ©pendances

Ère Virtuelle (2000–2010)

  • Technologies

    • Hyperviseurs : VMware ESX, Hyper-V
    • Open Source : KVM, Xen
  • BĂ©nĂ©fices

    • Consolidation des serveurs
    • Isolation forte
    • PortabilitĂ© des VMs
    • Haute disponibilitĂ©

Architecture de la Virtualisation

graph TB
H[Hyperviseur] --> V[Machines Virtuelles]
V --> R[Ressources Virtuelles]

R --> CPU[vCPU]
R --> RAM[vRAM]
R --> DISK[vDisk]
R --> NET[vNIC]

Astuce

Une machine virtuelle embarque un OS complet.

Hyperviseurs et Technologies

  • CPU : Intel VT-x / AMD-V

  • MĂ©moire : EPT / NPT

  • I/O : SR-IOV, NVMe-oF

  • Stockage : VMDK, QCOW2, SAN

  • Type 1 (Bare Metal) : ex. VMware ESX

    • Direct sur le matĂ©riel
    • Performances Ă©levĂ©es
  • Type 2 (Hosted) : ex. VirtualBox, VMware Workstation

    • Sur OS existant
    • SimplicitĂ© d’usage

Des Machines Virtuelles

graph TD
HW[Hardware] --> ESX[Hyperviseur]
ESX --> VM1[VM Linux]
ESX --> VM2[VM Linux]
ESX --> VM3[VM Windows]

  • Chaque VM a son propre OS
  • Isolation forte via l’hyperviseur
  • Ressources allouĂ©es statiquement
  • DĂ©marrage lent et consommation mĂ©moire Ă©levĂ©e

Bilan sur les Machines Virtuelles

Avantages

  • Isolation forte
  • Snapshots
  • Migration

Inconvénients

  • OS complet par VM
  • DĂ©marrage lent
  • Consommation mĂ©moire

L’Émergence des Conteneurs (2010+)

Les conteneurs ne virtualisent pas une machine, mais isolent des processus.

Fonctionnalités clés du noyau Linux

  1. Namespaces

    • PID, Network, Mount, UTS
  2. cgroups

    • Limitation CPU
    • Limitation mĂ©moire
    • Comptabilisation

Astuce

Un conteneur est une illusion d’isolation contrĂŽlĂ©e par le noyau.

Chronologie

timeline
  2000 : FreeBSD Jails : premiers conteneurs OS-level
  2007 : cgroups et Namespaces Linux : bases des conteneurs
  2008 : LXC : premiers conteneurs Linux
  2013 : Docker : popularisation des conteneurs
  2017 : Kubernetes : orchestration
  2020 : OCI Standards : image et runtime
  2024 : CRI-O, Podman : alternatives Ă  Docker

Machines Virtuelles vs Conteneurs

CritĂšre VM Conteneur
Isolation “MatĂ©rielle” Noyau
OS Complet Partagé
Démarrage Minutes Secondes
Taille Go Mo
Usage Legacy Cloud-native

Astuce

VM = virtualisation de machine Conteneur = virtualisation de processus

Philosophie et grands principes des conteneurs

Les conteneurs sont une approche d’isolation de processus plutît qu’une virtualisation de machine.

Principes clés

  • Isolation Chaque conteneur a son propre espace de processus, rĂ©seau et systĂšme de fichiers.

  • LĂ©gĂšretĂ© Pas d’OS complet : seulement les dĂ©pendances nĂ©cessaires Ă  l’application.

  • ImmutabilitĂ© Une image est un artefact immuable : le mĂȘme contenu donne le mĂȘme conteneur.

  • ÉphĂ©mĂ©ritĂ© Un conteneur est conçu pour ĂȘtre dĂ©marrĂ©, arrĂȘtĂ©, dĂ©truit rapidement.

  • PortabilitĂ© Une image fonctionne de maniĂšre identique partout (dev, test, prod, cloud).

Message central

Un conteneur est une unité de déploiement : un processus principal isolé, reproductible, portable et facilement orchestrable.

Docker et Conteneurs

  • Docker Inc. fondĂ© en 2010

  • Docker est une plateforme complĂšte qui popularise l’usage des conteneurs

  • Il fournit :

    • Un format d’image
    • Un systĂšme de build
    • Un registre
    • Une CLI simple

Avertissement

Docker n’est pas le conteneur Docker est un ensemble d’outils (maintenant basĂ© sur des standards) .

Docker et standards OCI

  • Standardisation en 2015 (OCI)

    • Image Specification
    • Runtime Specification
    • Distribution Specification
  • Alternatives Ă  Docker

    • Bas niveau
      • runc : runtime de rĂ©fĂ©rence
      • containerd : runtime de conteneurs
    • Haut niveau
      • CRI-O : runtime pour Kubernetes
      • Podman : gestion

Concepts Fondamentaux

Image

  • Template immuable
  • Lecture seule
  • Distribuable
  • Couches de systĂšme de fichiers empilĂ©es

Conteneur

  • Processus isolĂ©
  • Ressources limitĂ©es
  • État Ă©phĂ©mĂšre

Utilisation d’une image

docker run --detach \
  --name my_web_server \
  --publish 8080:80 \
  --volume /var/www:/usr/share/nginx/html \
  nginx

Ce que fait réellement docker run

  1. TĂ©lĂ©charge l’image depuis un registre
  2. Crée un systÚme de fichiers isolé
  3. Configure réseau et volumes (stockage de données externes)
  4. Lance le processus principal

CrĂ©ation d’une image

  • DĂ©finie via un fichier Dockerfile
  • Instructions pour construire l’image
  • Exemple simple pour une application Python
FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .
CMD ["python", "app.py"]
  • Construire l’image avec la commande :
docker build -t myapp:0.1.0 .

Astuce

Une image n’est pas une VM Elle contient uniquement ce qui est nĂ©cessaire Ă  l’application.

Gestion de base

docker image pull nginx
docker image ls
docker container ls -a
docker container rm web

Shell et inspection

docker run -it ubuntu
docker exec -it web bash
docker logs web
docker stats

Nettoyage

docker system prune
docker system prune -a

Composants standards

Docker CLI
   ↓
Docker Engine
   ↓
containerd
   ↓
runc
   ↓
Linux Kernel

Orchestration (aperçu)

  • Docker Compose

    • DĂ©veloppement
    • Applications simples
  • Kubernetes

    • Production
    • ScalabilitĂ©
    • RĂ©silience

Docker Compose ≠ Kubernetes “en petit”

Conclusion

  • Les conteneurs complĂštent la virtualisation
  • Ils apportent rapiditĂ©, portabilitĂ© et standardisation
  • Docker est un point d’entrĂ©e, pas une finalitĂ©
  • Kubernetes s’impose comme standard d’orchestration

Astuce

Un conteneur n’est pas un mini-serveur C’est un processus isolĂ© et maĂźtrisĂ©

#| echo: false
#| output: false

# stop any running containers
docker stop $(docker ps -q) 2>/dev/null || true
docker rm   $(docker ps -aq) 2>/dev/null || true

# cleanup volumes/networks (optionnel)
docker volume prune -f 2>/dev/null || true
docker network prune -f 2>/dev/null || true