En savoir plus

Docker

Les origines du projet et la mécanique du noyau Linux : pour comprendre ce qui se cache derrière docker run.

420-5A4-MT · Serveurs évolutifs · Docker
Logo Docker

D'où vient Docker ?

Genèse · 2013 Un projet open-source né chez dotCloud

Docker est né en 2013 de la vision de Solomon Hykes au sein du PaaS dotCloud. L'outil ne cherchait pas à inventer la virtualisation, mais à simplifier et démocratiser les mécanismes d'isolation natifs du noyau Linux.

📦 1. LXC & Noyau Linux
Isolation légère réutilisant le même noyau partagé sans surcoût d'OS complet.
⚙️ 2. Cgroups & Namespaces
Les cgroups imposent les plafonds (RAM, CPU) tandis que les namespaces isolent processus et réseau.
🥞 3. UnionFS & Calques
Superposition de couches d'images en lecture seule pour des builds rapides et économiques.
La révolution Docker : Transformer des commandes complexes du noyau Linux en une API élégante, universelle et reproductible (docker run, Dockerfile).

Sous le capot : la prison applicative

Mécanismes Des mécanismes natifs du noyau Linux

Le noyau Linux sait isoler un processus depuis longtemps. Docker ne fait qu'assembler élégamment des mécanismes natifs :

🙈 1. Espaces de nommage
Le conteneur ne voit que ses processus, ses montages de fichiers, son réseau et son nom d'hôte. Le reste du système lui est invisible.
⚖️ 2. Cgroups
Le noyau limite, compte et isole les ressources : processeur, mémoire, disque. Un conteneur gourmand ne peut pas affamer les autres.
⛓️ 3. L'ancêtre chroot
La prison (jail) : enfermer un processus dans un répertoire dont il ne peut pas sortir. L'idée a grandi jusqu'aux conteneurs modernes.

Installation de LAMP

Pour cette méthode, choisissons une image contenant le stack LAMP complet.

Celle-ci est basée sur Baseimage-docker (une image minimal d'Ubuntu modifiée pour une meilleure intégration Docker) et Docker-LAMP (une image contenant une pile LAMP), tout ça dans la même image.

PWD : c'est la commande present working directory, dans notre cas cette commande retourne /home/sebastien/conteneur. ${commande} exécute et retourne en chaîne de caractères le résultat de la commande.

Lançons donc un container avec cette image :

docker run -i -t -p "80:80" -v ${PWD}/www:/app -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:0.8.0-1804-php8

L'option -v (volume) relie les répertoires locaux ~/conteneur/www et ~/conteneur/mysql aux répertoires /app (simlink vers /var/www/html) et /var/lib/mysql de l'image Ubuntu dans le container.

L'option -p (port) relie les ports qui nous intéressent du container aux ports de votre machine locale. Ici le port 80 (HTTP) et le port 3306 (MySQL).

Le conteneur va bloquer votre session, passer aux diapositives suivantes pour continuer.