← Docker — livraison et exploitation des applications

Module 1 / 8 · 90 min

Processus, images et cycle de vie

Distinguer l’artefact immuable et l’instance qui s’exécute.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Une image est un modèle de système de fichiers et de configuration ; un conteneur est une instance avec un processus et une couche d’écriture. Arrêter une instance n’équivaut pas à supprimer son image. Les conteneurs utilisent les mécanismes du noyau hôte pour isoler des processus et ne sont pas des machines virtuelles complètes par nature. Le comportement exact de l’hôte varie notamment selon la plateforme d’exécution.

Raisonner et vérifier

Le processus principal détermine la vie du conteneur : lorsqu’il termine, l’instance s’arrête. Un processus en arrière-plan lancé par un shell peut donc disparaître avec son parent ou laisser une instance terminée. Préférez une commande principale au premier plan et comprenez la réception des signaux. Les données importantes ne doivent pas dépendre uniquement de la couche jetable de l’instance.

Modèle distribué et instance exécutée

Une image décrit un contenu et des paramètres utiles au lancement ; un conteneur exécute une instance selon une configuration. Deux conteneurs fondés sur la même image peuvent avoir des montages, variables et états différents. Pour diagnostiquer, notez donc l’identité de l’image et la configuration effective de l’instance. Le nom du projet ne suffit pas à décrire le processus réellement servi.

Erreur fréquente à comprendre

Une image est nécessairement un processus en cours.

Le conteneur exécute une instance fondée sur une image.

Une isolation qui dépend de l’environnement

Un conteneur ne doit pas être assimilé systématiquement à une machine virtuelle disposant de son propre noyau complet. Les mécanismes d’isolation et l’environnement d’exécution définissent les frontières réelles. Cette distinction compte pour les droits et l’impact d’un code compromis. Dessinez les accès à l’hôte, aux volumes et au réseau ; le seul mot conteneur ne décrit pas toutes les capacités disponibles.

Erreur fréquente à comprendre

Tout conteneur possède toujours son propre noyau complet de VM.

L’isolation ne correspond pas systématiquement à une machine virtuelle.

La couche écrivable n’est pas l’archive source

Les modifications de fichiers d’une instance ne republient pas automatiquement une nouvelle image dans le registre. La couche écrivable possède un cycle distinct et peut être jetable lors du remplacement du conteneur. N’y conservez pas l’unique copie de données métier durables. Définissez stockage, sauvegarde et restauration selon le besoin, puis testez le remplacement complet de l’instance avec ces données.

Erreur fréquente à comprendre

Écrire un fichier modifie automatiquement le registre source.

Les changements d’instance ne republient pas l’image.

Le processus principal porte le cycle de vie

Lorsque le processus principal termine normalement selon ce modèle, le conteneur s’arrête. Un service lancé en arrière-plan peut donc laisser son wrapper terminer alors que l’intention était de maintenir le service disponible. Gardez le processus principal au premier plan selon son contrat. Les tests doivent observer démarrage, fin nominale et échec, sans conclure qu’une image construite reste automatiquement en exécution.

Erreur fréquente à comprendre

Un conteneur reste toujours actif après la fin de tout processus.

Son cycle dépend de l’exécution principale.

Le tag est une référence qui peut bouger

Un tag comme latest est un nom dont le contenu cible peut évoluer selon le registre. L’utiliser ne prouve pas que deux déploiements successifs exécutent le même artefact. Pour une analyse d’incident, conservez l’identité du contenu réellement résolu. Une politique de mise à jour doit être explicite : la commodité d’un nom stable ne remplace pas une trace de version.

Erreur fréquente à comprendre

Un tag est une identité de contenu immuable par définition.

Le registre peut associer le même nom à un autre contenu.

Le digest identifie, sans certifier la qualité

Un digest relie une référence à un contenu selon le format concerné. Il aide à vérifier l’identité de l’artefact, mais ne prouve pas l’absence de vulnérabilité ni la légitimité de l’éditeur. Ces propriétés demandent d’autres contrôles et une politique de confiance. Pour une image multi-plateforme, notez aussi la plateforme effectivement choisie afin de décrire l’instance réelle.

Erreur fréquente à comprendre

Un digest prouve automatiquement la confiance dans l’éditeur.

L’identité de contenu et la provenance sont distinctes.

Transmettre les signaux au bon acteur

La forme de lancement et les wrappers influencent la réception des signaux d’arrêt. Un shell ajouté sans gestion adaptée peut rendre le cycle moins direct que la forme exec prévue pour le processus principal. Définissez l’arrêt gracieux et son délai, puis observez le comportement réel. Un arrêt forcé qui semble rapide ne prouve pas que les travaux en cours ont été terminés ou repris correctement.

Erreur fréquente à comprendre

Tout wrapper shell transmet toujours parfaitement les signaux.

Le mode de lancement et le wrapper influencent le comportement.

Une variable d’environnement reste une donnée sensible

Injecter un secret par environnement ne le rend pas impossible à observer. Le processus qui le consomme et certains outils de diagnostic peuvent y avoir accès selon les droits. Limitez distribution, journalisation et conservation. Les exemples de laboratoire doivent utiliser des valeurs publiques fictives. Retirer une variable d’une nouvelle release ne révoque pas une capacité déjà exposée dans une ancienne copie.

Erreur fréquente à comprendre

Une variable d’environnement est impossible à observer par tout outil.

Sa distribution et sa visibilité demandent une politique.

Ajouter les restrictions nécessaires

L’isolation disponible doit être complétée par des choix de runtime : utilisateur, capacités, montages, accès au socket et ressources selon le besoin. Un processus non privilégié peut encore présenter des vulnérabilités métier. La défense doit donc limiter les conséquences tout en maintenant les contrôles applicatifs. Vérifiez les restrictions effectives plutôt que leur seule présence dans un commentaire de configuration.

Erreur fréquente à comprendre

Le mot conteneur garantit toute sécurité contre tout code hostile.

Les capacités et interfaces exposées comptent.

Tester le conteneur réellement livré

Une construction réussie ne démontre pas le démarrage ni le comportement du service. Lancez l’artefact avec une configuration représentative et vérifiez le parcours utile, les erreurs et l’arrêt. Conservez image, paramètres et résultat dans la preuve. Tester depuis le poste avec des fichiers non embarqués peut masquer une dépendance manquante ; un environnement propre rend ces hypothèses visibles.

Erreur fréquente à comprendre

Une image construite prouve la disponibilité du service.

Construction et exécution sont des étapes différentes.

Atelier guidé : lire, expliquer et vérifier le code

FROM php:8.4-cli
COPY worker.php /app/worker.php
CMD ["php", "/app/worker.php"]

Le CMD de l’atelier est écrit en forme JSON dite exec. Il décrit le lancement du processus PHP avec son script, sans demander ici une forme shell qui interpréterait la commande comme une ligne de shell. L’extrait ne publie aucun port et ne déclare aucun volume ; ces propriétés demanderaient leur propre configuration.

Dans le laboratoire, lancez un script qui attend puis traite un arrêt contrôlé. Comparez la forme de lancement et la transmission des signaux en observant les événements du processus. Remplacez ensuite entièrement le conteneur et examinez les fichiers persistants attendus. Ces expériences séparent contenu d’image, cycle de processus et stockage, au lieu de considérer qu’un seul Dockerfile démontre le fonctionnement complet du service.

Exemple commenté

docker run --name lab-hello --rm alpine:3.22 echo "reservation lab"
# La commande termine ; le conteneur est supprimé grâce à --rm.

L’instance n’est pas un service permanent : elle exécute echo puis termine. L’image et le conteneur ont des cycles de vie distincts.

Exercice de mise en pratique

Lancez un conteneur au premier plan, observez sa sortie puis comparez docker ps et docker ps -a.

Voir une proposition de correction

Exécutez une commande courte sans --rm pour inspecter ensuite son état et son code de sortie. Supprimez uniquement les ressources nommées du laboratoire.

Points de vérification

  • Identifier le processus principal.
  • Séparer arrêt, suppression et image.
  • Prévoir la persistance hors de la couche jetable.

Contrôle de connaissances

Cours associé : Processus, images et cycle de vie ↗
Que se passe-t-il normalement quand le processus principal termine ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →