Fiche de révision : Docker et conteneurisation

Plan du Cours

  1. Infrastructures reproductibles et souveraines
  2. Conteneurs, images et Dockerfile
  3. Machines virtuelles et conteneurs
  4. Choisir et sécuriser ses images
  5. Microservices et montée en charge
  6. Installer Docker sur Debian
  7. Cycle de vie des conteneurs
  8. Lister et nommer les conteneurs
  9. Lancer et versionner un service
  10. Réseau Docker et ports publiés
  11. Gérer les images et mises à jour
  12. Isoler les services par réseau

1. Infrastructures reproductibles et souveraines

Notions clés & Définitions

  • Infrastructure as Code : Décrit le fonctionnement d’une infrastructure dans des fichiers ou des recettes afin de pouvoir la reproduire automatiquement.

Points essentiels

  • Dans l’équipe décrite, environ 90 % du travail d’infrastructure est industrialisé et automatisé pour gérer 160 établissements scolaires et une quarantaine de collectivités avec une équipe d’une quinzaine de personnes.

  • Terraform et Ansible sont des outils d’IaC, tandis que l’équipe décrite utilise SaltStack pour gérer son infrastructure hébergée en interne.

  • L’infrastructure décrite héberge ses données en interne pour maîtriser le matériel, les données, les services et l’accès physique, notamment par souci de souveraineté.

📌 Pour un service en production, Docker seul n’est pas considéré comme suffisant pour assurer la stabilité ; il est accompagné d’autres outils.

Astuce mémo

Une recette IaC reproduit la même brique sur chaque site.

2. Conteneurs, images et Dockerfile

Notions clés & Définitions

  • Conteneur : Enveloppe virtuelle qui distribue une application avec son code ou son binaire, son environnement d’exécution, ses bibliothèques et ses fichiers, outils et scripts annexes.
  • Image Docker : Capture empaquetée et immuable servant de référence pour créer des conteneurs.

★ À maîtriser

  • Un conteneur est une instance d’image, et plusieurs conteneurs peuvent être créés à partir de la même image.

  • Pour construire une image, on part d’une image existante et on décrit dans un Dockerfile les logiciels et les fichiers à ajouter, au moyen de commandes telles que RUN.

Compléments

  • Une architecture web peut séparer le front-end et le back-end dans deux conteneurs indépendants reliés entre eux.

  • Une modification effectuée dans un conteneur est perdue à sa suppression si elle n’est ni intégrée au Dockerfile et à l’image, ni stockée dans un volume.

Astuce mémo

L’image est le modèle immuable ; le conteneur en est l’instance jetable.

3. Machines virtuelles et conteneurs

★ À maîtriser

📌 Une machine virtuelle embarque un système d’exploitation avec son propre noyau, tandis qu’un conteneur partage le noyau de son hôte.

  • Une VM pèse généralement plusieurs gigaoctets à plusieurs dizaines de gigaoctets, tandis qu’un conteneur pèse généralement quelques centaines de mégaoctets ou moins.

  • La virtualisation complète offre une isolation plus forte que la conteneurisation, car une VM n’a pas de lien direct avec le système hôte, tandis que les conteneurs partagent son noyau.

Compléments

  • Une VM complète de GLPI est décrite comme nécessitant environ 8 à 9 Go de disque, 3 à 4 Go de RAM et un ou deux vCPU.

  • Un conteneur LXC sous Proxmox peut être démarré en environ cinq secondes à partir d’un template Debian 13.

  • Les conteneurs sont isolés par des mécanismes du noyau Linux, notamment les cgroups, et les capabilities contrôlent l’accès des applications à certaines fonctions du noyau.

Astuce mémo

VM : noyau dédié et isolation forte ; conteneur : noyau partagé et légèreté.

4. Choisir et sécuriser ses images

★ À maîtriser

📌 Sur Docker Hub, il est recommandé de privilégier les images officielles publiées par l’éditeur du logiciel, car les images disponibles ont des qualités variables.

📌 Une image n’est pas plus sûre que son image de base ; une base vulnérable doit être reconstruite, corrigée et maintenue.

Compléments

  • Les tags distinguent les variantes d’une image, par exemple les versions basées sur Debian ou Alpine et celles incluant des composants supplémentaires.

  • L’image Alpine de base pèse environ 3,7 Mo, l’image Debian 13 environ 47 Mo, et l’image Apache officielle environ 46 Mo.

  • Les images renforcées couvrent notamment les langages et outils suivants :

    • Python
    • PHP
    • Ruby
    • Rust
    • NVIDIA CUDA
  • Le README d’une image explique comment l’utiliser et peut fournir des fichiers de configuration ou des commandes de lancement.

5. Microservices et montée en charge

★ À maîtriser

📌 Le principe de conception Docker présenté est de faire correspondre un conteneur à un service, puis d’utiliser Docker Compose pour démarrer ensemble les services d’une application.

  • Dans une architecture en microservices, les conteneurs peuvent être mis à jour indépendamment et la panne d’un service peut être limitée à ce service.

Compléments

  • Une application web peut être découpée en conteneurs front-end, back-end et base de données, avec souvent un cache comme Redis.

  • Dans l’exemple de montée en charge, Kubernetes remplace progressivement cinq conteneurs dédiés au paiement, en faisant évoluer la répartition entre ancienne et nouvelle version jusqu’à ce que les cinq utilisent la nouvelle version.

  • Dans l’exemple donné, une image front-end passant d’un conteneur à dix peut multiplier par dix la capacité en une quinzaine de secondes, dans la limite des ressources disponibles.

📌 Docker Compose permet le scale, mais celui-ci est difficilement automatisable, tandis que Kubernetes peut ajouter ou supprimer automatiquement des instances selon des métriques.

Astuce mémo

Images légères → démarrage rapide → montée en charge accélérée.

6. Installer Docker sur Debian

★ À maîtriser

  • L’installation de Docker sur Debian suit la documentation officielle depuis le dépôt APT, après installation de sudo, puis installe Docker CE, sa CLI, containerd, Buildx et le plugin Compose.

  • L’ajout d’un utilisateur au groupe docker permet d’utiliser Docker sans être root, mais ce groupe confère des droits équivalents à root sur la machine.

Compléments

  • Pour la VM Debian 13 de travail, les recommandations sont de disposer de 4 à 8 Go de RAM, de 2 à 4 vCPU et d’au moins 64 Go de disque.

  • Sur Debian, la connexion SSH directe en root avec un mot de passe est interdite par défaut ; on se connecte avec un utilisateur simple puis on passe root avec su -.

📌 La commande su - charge l’environnement de root, notamment son répertoire personnel et son PATH, tandis que su seul conserve l’environnement de l’utilisateur simple.

Astuce mémo

Préparer Debian, installer Docker, vérifier le démon, lancer hello-world.

7. Cycle de vie des conteneurs

★ À maîtriser

  • La durée de vie d’un conteneur est liée à celle de son processus principal : quand ce processus se termine, le conteneur s’arrête.

📌 docker ps affiche les conteneurs en cours d’exécution, tandis que docker ps -a affiche aussi les conteneurs arrêtés.

Compléments

  • Sous Linux, le code de sortie 0 indique qu’un programme s’est arrêté normalement, tandis qu’une autre valeur signale une erreur.

  • docker run -it ubuntu bash lance un shell interactif dans un conteneur Ubuntu, et quitter ce shell arrête le conteneur.

📌 Un outil nécessaire au service doit être prévu dans l’image plutôt qu’installé manuellement dans le conteneur en cours d’exécution.

Astuce mémo

Le processus s’arrête → le conteneur s’arrête.

8. Lister et nommer les conteneurs

★ À maîtriser

  • Chaque conteneur possède un identifiant et un nom, généré aléatoirement si aucun nom n’est précisé.

Compléments

  • docker ps est un alias de docker container ls ou de docker container ps, et les anciennes formes sont conservées pour la compatibilité.

  • docker ps -n 3 affiche les trois derniers conteneurs créés, --no-trunc affiche les identifiants complets et --size indique l’espace disque par conteneur.

  • Les filtres docker ps -f peuvent cibler notamment l’identifiant, le nom, l’état ou des labels tels que env=prod.

  • Les labels permettent de classer les conteneurs, par exemple avec env=dev, env=prod ou client=clientA, puis de les retrouver à l’aide de filtres.

9. Lancer et versionner un service

★ À maîtriser

  • 🔄 La gestion d’un conteneur suit ces étapes. :
    1. Le lancer en arrière-plan avec docker run -d.
    2. L’arrêter avec docker stop.
    3. Le supprimer avec docker rm.

📌 Sans tag explicite, Docker utilise implicitement latest ; fixer un tag tel que httpd:2.4 évite de basculer automatiquement vers une nouvelle version potentiellement incompatible.

Compléments

📌 Un conteneur en cours d’exécution doit être arrêté avant d’être supprimé avec docker rm, sauf si la suppression forcée docker rm -f est utilisée.

  • L’option --name sert à nommer un conteneur et doit être placée avant le nom de l’image dans docker run.

  • Les options courtes -itd regroupent les options -i, -t et -d pour lancer un conteneur interactif, avec terminal et détaché.

Astuce mémo

latest suit la dernière version ; un tag fixé maîtrise la version utilisée.

10. Réseau Docker et ports publiés

★ À maîtriser

  • Docker crée l’interface docker0 et un réseau bridge par défaut dans le sous-réseau 172.17.0.0/16, avec des règles de NAT et de redirection gérées automatiquement.

  • Sans publication de port, un service dans un conteneur n’est pas accessible depuis les autres équipements du réseau, même si l’hôte peut le joindre par son adresse IP interne.

📌 docker run -p 80 publie le port 80 du conteneur sur un port aléatoire de l’hôte, tandis que -p 80:80 associe le port 80 de l’hôte au port 80 du conteneur.

Compléments

  • L’option -P publie automatiquement tous les ports déclarés par l’image sur des ports aléatoires de l’hôte, tandis que -p publie un port précis ou un port de conteneur sur un port hôte aléatoire.

📌 Un même port de l’hôte ne peut être attribué qu’une fois ; plusieurs conteneurs peuvent toutefois utiliser le même port interne si leurs ports hôte sont différents.

  • Par défaut, un port publié écoute sur toutes les interfaces ; indiquer une adresse IP dans la publication limite l’accès à cette interface.

11. Gérer les images et mises à jour

★ À maîtriser

📌 Exécuter docker pull avant docker run télécharge l’image à l’avance et évite d’attendre son téléchargement au moment du lancement.

  • Pour mettre à jour un service, on télécharge la nouvelle image, on supprime l’ancien conteneur puis on lance un nouveau conteneur à partir de cette image.

📌 Les données non conservées dans un volume sont perdues lors du remplacement du conteneur par une nouvelle version.

Compléments

  • docker image ls liste les images locales et docker rmi supprime une image qui n’est utilisée par aucun conteneur.

  • docker stats affiche en temps réel la consommation des conteneurs.

Astuce mémo

Télécharger la nouvelle image, supprimer l’ancien conteneur, lancer le nouveau.

12. Isoler les services par réseau

★ À maîtriser

📌 Tous les conteneurs rattachés au réseau bridge par défaut peuvent communiquer entre eux.

  • Pour isoler des groupes de conteneurs, on crée des réseaux Docker dédiés puis on rattache chaque conteneur au réseau voulu lors de son lancement.

Compléments

  • Docker attribue un sous-réseau à chaque réseau créé ; dans l’exemple, clientA reçoit 172.18.0.0/16 et clientB reçoit 172.19.0.0/16.

  • Dans un réseau Docker créé avec docker network create, le DNS intégré permet aux conteneurs du réseau de se joindre par leur nom, tandis que l’option --link est obsolète.

📌 Un réseau Docker crée un réseau isolé de niveau 3, tandis qu’un VLAN 802.1Q marque les trames réseau avec un tag.

  • Les plages d’adresses des réseaux Docker doivent être vérifiées dans un réseau existant, car les plages 172.x par défaut peuvent entrer en conflit avec les réseaux déjà utilisés.

Astuce mémo

Même réseau : communication possible ; réseaux séparés : conteneurs isolés.

Tableaux de synthèse

Machine virtuelle et conteneur

DimensionMachine virtuelleConteneur
NoyauSystème d’exploitation avec noyau dédiéNoyau partagé avec l’hôte
PoidsPlusieurs Go à plusieurs dizaines de GoQuelques Mo à quelques centaines de Mo
DémarrageInstallation ou démarrage completQuelques secondes ou moins
IsolationTrès forteBonne, mais dépend du noyau

Teste tes connaissances

Teste tes connaissances sur Docker et conteneurisation avec 29 questions à choix multiples et corrections détaillées.

1. Quel est le principe de l’Infrastructure as Code (IaC) ?

2. Pourquoi héberger les données en interne peut-il contribuer à la souveraineté d’une infrastructure ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Docker et conteneurisation avec 94 flashcards interactives.

Que décrit l’Infrastructure as Code (IaC) dans des fichiers ou des recettes ?

Le fonctionnement d’une infrastructure afin de pouvoir la reproduire automatiquement.

Qu’est-ce qu’un conteneur informatique ?

Une enveloppe virtuelle qui distribue une application et ses composants.

À quoi sert une image Docker ?

À servir de référence immuable pour créer des conteneurs.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches