Diaporama de notions

Docker

Acte 1 · La fondation : le WordPress de la petite entreprise vit sans armure sur sa machine. On l'emballe dans des conteneurs.

420-5A4-MT · Serveurs évolutifs · Docker
Notion 1

Qu'est-ce qu'un conteneur ?

Un conteneur est une unité standard de logiciel qui regroupe une application et toutes ses dépendances (bibliothèques, configuration, exécutables), afin qu'elle s'exécute de façon fiable sur n'importe quelle machine : votre portable, une machine virtuelle, un serveur infonuagique.

La métaphore maritime

Comme le conteneur de bateau : peu importe le contenu, la boîte a un format standard que tous les ports du monde savent manipuler.

Le processus prisonnier

Vu de la machine, un conteneur est un simple processus, mais enfermé : il ne voit que ses propres fichiers, processus et réseau. C'est le cloisonnement.

Notion 2

Conteneur ou machine virtuelle ?

Machine virtuelle
  • Un hyperviseur émule du matériel complet.
  • Chaque VM embarque son propre système d'exploitation et son noyau.
  • Lourde (gigaoctets), lente à démarrer (minutes), mais isolation très forte.
Conteneur
  • Tous les conteneurs partagent le noyau Linux de la machine hôte.
  • L'isolation est faite par le noyau lui-même, pas par du matériel émulé.
  • Léger (mégaoctets), démarre en secondes, on en met des dizaines par machine.

Les deux ne se font pas concurrence : dans ce cours, vos conteneurs tourneront dans une machine virtuelle. L'emballage dans l'emballage, et c'est très courant en production.

Notion 3

L'image et le conteneur

L'image
  • La recette : un modèle figé, en lecture seule.
  • Se télécharge depuis un registre comme Docker Hub (ubuntu, mysql, wordpress...).
  • Se partage : la même image donne le même résultat partout.
Le conteneur
  • Le plat cuisiné : une instance vivante de l'image.
  • On peut en lancer dix à partir de la même image.
  • Jetable : on le détruit et on le recrée sans remords.
# telecharger une image, puis lancer un conteneur
docker pull ubuntu
docker run ubuntu echo bonjour
bonjour
Notion 4

Le cycle de vie et les journaux

Un conteneur naît, vit, s'arrête, repart, meurt. Six commandes pour tout piloter :

docker run -d --name monsite monimage
# -d : en arriere-plan, la session reste libre
docker ps
# la liste des conteneurs en marche
docker ps -a
# la meme liste, y compris les conteneurs a l'arret
docker stop monsite
docker start monsite
docker rm monsite
# et pour voir ce qui se passe dedans :
docker logs monsite

Les journaux (logs) sont vos yeux : un conteneur qui refuse de démarrer s'explique toujours dans ses journaux.

Notion 5

Les volumes et la redirection de ports

Un conteneur est jetable : à sa destruction, tout ce qu'il contenait disparaît. Deux ponts le relient au monde réel :

Le volume (-v)

Un répertoire qui survit au conteneur. Les données de la base et les fichiers du site y vivent en sécurité, hors de la boîte.

Le port (-p)

Le conteneur a son propre réseau. La redirection 80:80 relie le port de la machine à celui du conteneur pour que les visiteurs entrent.

# -v hote:conteneur -p hote:conteneur
docker run -p 80:80 -v ${PWD}/www:/app monimage

Pour creuser avec des diagrammes et des exemples : le diaporama Volumes et ports.

Notion 6

L'adresse selon votre instance

L'adresse à ouvrir dans le navigateur, c'est toujours : l'adresse IP de la machine où Docker tourne, suivie du port externe choisi avec -p.

Docker sur votre poste

Moteur Docker installé sur votre Linux, ou DinD : la machine, c'est votre poste : http://localhost:8080.

VirtualBox

Docker tourne dans la machine virtuelle : utiliser son adresse IP : http://192.168.56.2:8080. Avec -p "80:80" : http://192.168.56.2 tout court.

VPS

L'adresse IP publique du serveur : http://adresse-du-vps:8080 (port ouvert dans le pare-feu).

localhost n'est vrai que si Docker tourne sur votre poste : partout ailleurs, remplacer localhost par l'adresse IP de l'instance.

Notion 7

Piraté ? On jette, on redéploie

Le WordPress de la petite entreprise vient de se faire pirater. Nettoyer un serveur compromis à la main prend des heures, sans jamais être certain qu'il ne reste pas une porte dérobée. Docker change complètement cette situation.

L'image, référence saine

L'image est en lecture seule : le pirate a modifié le conteneur, pas la recette. Relancer depuis l'image redonne un serveur propre, identique au premier jour.

Restauration en 5 secondes

docker rm du conteneur compromis, docker run d'un neuf : le site revient en ligne pendant que la concurrence répare encore. Les données, elles, vivent dans les volumes.

La nuance qui compte : redéployer efface l'intrusion, pas la faille. Il faut aussi corriger ce qui a laissé entrer le pirate (plugin à jour, bonnes permissions), sinon il revient par la même porte. (Cette correction ne fait pas partie du scénario du devoir.)

Notion 8

Une compartimentation... et le débat rootless

Le conteneur est déjà une compartimentation de protection : le processus enfermé ne voit que ses fichiers, ses processus et son réseau. Une brèche dans WordPress reste dans la boîte, loin du reste de la machine.

Le scandale du démon root
  • Le démon Docker (dockerd) tourne en root.
  • Être membre du groupe docker = root de facto sur la machine.
  • Un montage imprudent (-v /:/hote) ou une évasion de conteneur expose toute la machine.
La réponse Podman
  • Podman : mêmes commandes, mais sans démon et rootless par conception.
  • Les conteneurs tournent avec les droits de votre usager, rien de plus.
  • Docker a riposté avec son mode rootless : le débat a fait avancer tout le monde.
# activer le mode rootless de Docker sur votre Linux (une fois)
sudo apt install -y uidmap docker-ce-rootless-extras
dockerd-rootless-setuptool.sh install
# puis pointer le client vers le demon de VOTRE usager (~/.bashrc)
export DOCKER_HOST=unix:///run/user/$UID/docker.sock

La compartimentation est réelle, mais elle n'est pas magique : elle protège d'autant mieux qu'on donne au conteneur le moins de privilèges possible.

Révision

Réviser Docker en un clic

Révision Docker : trois guides sur docker.projet.autos