Aller au contenu
Docker : les fondamentaux

Docker : les fondamentaux

200 · Pratiquer ⏱ 11 h 30 dockerlinux

À la fin, vous saurez

  • Expliquer ce qu'est un conteneur en termes de mécanismes Linux, et ce qu'il n'est pas
  • Exécuter, inspecter, diagnostiquer et arrêter proprement des conteneurs
  • Lire une image : couches, étiquettes, empreintes, registres
  • Écrire un premier Dockerfile simple et reproductible
  • Persister des données et relier des conteneurs en réseau
  • Décrire une application multi-conteneurs avec Docker Compose
  • Appliquer les réglages de sécurité et de ressources de base

Prérequis

Ce cours s'adresse à toute personne qui doit faire tourner du logiciel dans des conteneurs : développeur qui veut un environnement reproductible, administrateur qui hérite d'une application « dockerisée », futur ingénieur DevOps qui prépare Kubernetes. Il part de zéro sur les conteneurs, mais suppose que vous êtes à l'aise dans un terminal Linux : naviguer dans les répertoires, lire un fichier, lancer et arrêter un processus.

L'approche

Beaucoup d'introductions à Docker enseignent une liste de commandes. Ce cours fait l'inverse : il commence par expliquer ce qu'est un conteneur pour le noyau Linux, parce que presque tous les problèmes que vous rencontrerez ensuite (un conteneur qui ne s'arrête pas, un volume illisible, un port injoignable, un fichier qui disparaît) deviennent évidents une fois le mécanisme compris. Chaque commande est ensuite présentée avec sa sortie réelle, obtenue sur les versions indiquées en tête de leçon, et avec l'explication de chaque option.

Le fil conducteur est une petite application web en Python adossée à une base PostgreSQL : on la lance, on la casse, on la répare, on la persiste, on la relie en réseau, puis on la décrit entièrement dans un fichier Compose.

À la fin du cours

Vous saurez expliquer à un collègue pourquoi un conteneur n'est pas une machine virtuelle, faire tourner et diagnostiquer n'importe quelle image publique, écrire un Dockerfile simple, garder vos données à l'abri de la suppression d'un conteneur et décrire une application complète dans un fichier compose.yaml. Vous aurez aussi les réflexes de sécurité de base : ne pas exposer ce qui n'a pas à l'être, ne pas tourner en root sans raison, limiter les ressources.

La construction d'images optimisées (multi-étapes, cache BuildKit, images minimales, signatures) fait l'objet du cours suivant, Construire des images de conteneurs. L'exécution à l'échelle est traitée dans les cours Kubernetes.

Ce qu'il faut installer

  • Une machine Linux (physique, virtuelle ou WSL 2), avec les droits sudo. Les exemples ont été exécutés sur Ubuntu 24.04.
  • Docker Engine, installé à la leçon 4. Si vous êtes sur macOS ou Windows, Docker Desktop ou une alternative fonctionne aussi, avec les différences signalées dans le cours.
  • Environ 2 Go d'espace disque pour les images utilisées.

Plan du cours

  1. Pourquoi les conteneurs existent 35 min 100 · Comprendre
    Le problème que les conteneurs résolvent, ce qui les distingue d'une machine virtuelle, et les quarante ans d'histoire qui ont mené à Docker.
  2. Un conteneur à la main : namespaces, cgroups, capabilities 55 min 100 · Comprendre
    Construire un conteneur sans Docker, avec unshare, chroot et le système de fichiers des cgroups, pour voir exactement ce que fait un moteur de conteneurs.
  3. L'architecture de Docker, du client à runc 45 min 100 · Comprendre
    Qui fait quoi quand vous tapez docker run : le client, l'API, dockerd, containerd, le shim et runc, et pourquoi ce découpage compte en exploitation et en sécurité.
  4. Installer Docker Engine proprement 50 min 200 · Pratiquer
    Choisir sa source de paquets, installer Docker Engine depuis le dépôt officiel, régler les droits d'accès en connaissance de cause et poser une configuration de démon saine dès le premier jour.
  5. docker run décortiqué 55 min 200 · Pratiquer
    La commande la plus utilisée de Docker, option par option : ce que l'image fournit par défaut, ce que vous remplacez, les modes interactif et détaché, l'environnement, l'utilisateur et les politiques de redémarrage.
  6. Cycle de vie et diagnostic d'un conteneur 1 h 05 200 · Pratiquer
    Observer, interroger et arrêter proprement un conteneur : journaux, exec, inspect, signaux et PID 1, vérifications de santé, et déboguer une image qui n'a même pas de shell.
  7. Les images : couches, étiquettes, empreintes et registres 1 h 200 · Pratiquer
    Ce que contient réellement une image, comment ses couches se partagent et s'empilent, pourquoi une étiquette peut mentir et une empreinte jamais, et comment fonctionne un registre.
  8. Un premier Dockerfile, propre dès le départ 1 h 200 · Pratiquer
    Empaqueter l'application du fil conducteur : instructions essentielles, contexte de construction, .dockerignore, ordre des étapes et cache, forme exec, utilisateur non privilégié.
  9. Persister les données : volumes, montages et tmpfs 1 h 200 · Pratiquer
    Où vivent les données d'un conteneur, comment les garder au-delà de sa suppression, et comment éviter les pièges de droits, de chemins et de sauvegarde qui font perdre des données en production.
  10. Relier et exposer : les réseaux Docker 1 h 05 200 · Pratiquer
    Comment les conteneurs se trouvent et se parlent, comment on les expose à l'extérieur, ce que Docker fait au pare-feu de l'hôte, et pourquoi UFW ne vous protège pas des ports publiés.
  11. Décrire une application complète avec Docker Compose 1 h 10 200 · Pratiquer
    Remplacer les commandes docker run par un fichier versionné : services, réseaux, volumes, ordre de démarrage fondé sur la santé, variables, environnement de développement, profils et secrets.
  12. Sécuriser et limiter ses conteneurs 1 h 10 200 · Pratiquer
    Durcir l'exécution d'un conteneur, couche par couche : ressources, utilisateur, capabilities, no-new-privileges, système de fichiers, user namespaces et mode rootless, analyse des images. Avec la grille de l'ANSSI.

Sources