Aller au contenu
Sommaire

Cours Docker — images, conteneurs, volumes et Compose

Cours · environ 12 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. 5 points non vérifiés · Sources

Objectifs d'apprentissage

À la fin de ce cours, l'apprenant peut :

  1. expliquer client, démon, registre, image, conteneur ;
  2. lire un Dockerfile et distinguer RUN, CMD, ENTRYPOINT, ENV, ARG ;
  3. construire une image et lancer un conteneur en connaissant les effets de -d, -p, -v, --rm ;
  4. inspecter l'état (ps, images, logs, exec) en lecture ;
  5. distinguer volumes, bind mounts et couche inscriptible d'un conteneur ;
  6. décrire ce que suppriment rm, system prune et compose down ;
  7. repérer les risques : ports publiés, droits du démon, images non épinglées, nettoyage destructif.

Prérequis

  • Savoir ouvrir Terminal et lire une commande (voir le cours Terminal macOS).
  • Pour la pratique : Docker installé et démarré. L'installation ne fait pas partie des exercices obligatoires.
  • Espace disque pour les images et mémoire suffisante (voir chapitre 2).

Parcours et chapitres

1. Concepts : client, démon, registre

D'après la documentation « Docker overview » : Docker est une plateforme open source pour empaqueter des applications dans des conteneurs. Le démon (dockerd) écoute les requêtes de l'API Docker et gère images, conteneurs, réseaux et volumes. Le client (docker) envoie les commandes au démon par une API REST. Un registre stocke et distribue des images ; Docker Hub est le registre public par défaut. Une image est un modèle en lecture seule ; chaque instruction d'un Dockerfile crée une couche. Un conteneur est une instance exécutable d'une image.

Vérification : expliquer à voix haute le trajet de docker run <image> : client, démon, registre éventuel, conteneur.

2. Docker Desktop sur Mac : exigences et licence

La page d'installation Mac indique : Docker Desktop est pris en charge sur la version majeure courante de macOS et les deux précédentes ; 4 Go de RAM minimum ; sur Apple Silicon, Rosetta 2 est recommandé sans être strictement obligatoire. L'installation interactive consiste à télécharger Docker.dmg, faire glisser l'application dans Applications, la lancer et accepter les conditions du service d'abonnement. La page recommande de fermer avant d'installer les applications susceptibles d'appeler Docker (VS Code, terminaux).

Licence (page « Docker Desktop license ») : gratuit pour l'usage personnel, l'éducation, les projets open source non commerciaux et les petites entreprises (moins de 250 employés et moins de 10 M$ de revenu annuel) ; abonnement payant pour l'usage professionnel dans les grandes organisations et entités gouvernementales. Aucun achat sans accord préalable de Stéphane. Docker Engine et Moby ne sont pas concernés par ces conditions, selon la page.

L'installation modifie le poste : ne pas la lancer sans décision. Désinstallation et retour arrière : non vérifiés dans les pages consultées, lire la page officielle avant.

3. Premiers pas en lecture seule

Commandes de lecture documentées :

CommandeRôle (d'après la référence)
docker container ls (alias docker ps)liste les conteneurs en cours ; -a inclut les arrêtés ; --filter filtre
docker image ls (alias docker images)liste les images locales, tailles ; -a inclut intermédiaires et orphelines
docker logs <conteneur>journaux ; -f suit en continu, --tail limite, --since filtre par date

L'alias docker ps / docker images est supposé usuel mais n'a pas été vérifié sur les pages consultées. docker version et docker info : non vérifiés.

Terminal
docker container ls -adocker image ls
  • Contexte : Terminal ; Docker Desktop démarré ; version de Docker non connue.
  • Droits : utilisateur ayant accès au démon (sur Mac avec Docker Desktop, mécanisme non vérifié dans les pages consultées).
  • Effet : lecture seule de l'état local.
  • Vérification : deux tableaux s'affichent (éventuellement vides).
  • Retour arrière : sans objet.

Vidéo à enregistrer Lister conteneurs et images avec docker container ls -a et docker image ls. (absente de ce poste : enregistrer puis copier le fichier dans media/docker-lecture-seule.mp4, voir docs/MEDIAS.md).

Transcription et texte alternatif

Script prévu, à ajuster à l'enregistrement. Docker Desktop est démarré. La commande docker container ls tiret a liste tous les conteneurs, en cours ou arrêtés ; on lit les colonnes. docker image ls liste les images locales avec leur taille. Ces deux commandes sont en lecture seule : elles ne modifient rien.

4. Lancer un conteneur : options et risques

Cycle de vie simplifié d'un conteneur : une image devient un conteneur créé (docker create), en cours (docker start), arrêté (docker stop) puis supprimé (docker rm) ; docker run enchaîne create et start.Imagedocker createCréédocker startEn coursdocker stopArrêtédocker rmSupprimédocker run= create+ start
Cycle de vie simplifié d'un conteneur. Avec --rm, le conteneur est supprimé dès son arrêt. Schéma pédagogique : les commandes create et start n'ont pas été relues dans les pages consultées (à vérifier).

La référence de docker container run décrit :

  • -d : exécution en arrière-plan, renvoie l'identifiant du conteneur ;
  • -it : -i garde l'entrée standard ouverte, -t alloue un pseudo-terminal ;
  • --name : nom choisi pour le conteneur ;
  • --rm : supprime le conteneur et ses volumes anonymes à l'arrêt ;
  • -p hôte:conteneur : publie un port. Sans adresse IP, le port est exposé sur toutes les interfaces (0.0.0.0) selon la page ;
  • -v : monte un dossier de l'hôte ; si le dossier hôte n'existe pas, Docker le crée ;
  • -e : variable d'environnement ; --user : utilisateur ou UID du processus ;
  • --restart combiné à --rm produit une erreur ;
  • --privileged donne des permissions étendues, à employer avec une extrême prudence ; un conteneur est sans privilèges par défaut.

Par défaut un conteneur ne publie aucun port ; -p 8080:80 mappe explicitement.

Exemple facultatif, avec effet réseau et disque :

Attention, effet notable. Cette commande peut démarrer des conteneurs ou télécharger des images. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
docker run --rm -d --name demo-web -p 127.0.0.1:8080:80 nginx
  • Contexte : Docker Desktop démarré. Cette commande ne figure pas telle quelle dans les pages consultées ; elle assemble -d, --rm, --name, -p et l'image nginx (citée dans la page « Run containers ») et la forme 127.0.0.1:8080:80 n'a pas été vérifiée : non vérifié, relire la référence.
  • Droits : utilisateur normal.
  • Effet : télécharge l'image nginx du registre public si absente (réseau, espace disque), démarre un conteneur en arrière-plan, publie le port de l'hôte uniquement sur la boucle locale si la forme est correcte.
  • Vérification : docker container ls montre demo-web ; ouvrir http://127.0.0.1:8080 dans le navigateur.
  • Retour arrière : docker stop demo-web (SIGTERM puis SIGKILL après le délai ; défaut 10 s sous Linux, 30 s sous Windows selon la page, valeur sous Docker Desktop Mac non vérifiée). Grâce à --rm, le conteneur est supprimé à l'arrêt ; supprimer l'image : docker image rm nginx (non vérifié).
  • Précaution : ne pas utiliser ce modèle pour exposer un service sur le réseau.

Vidéo à enregistrer Lancer nginx sur 127.0.0.1:8080, vérifier dans le navigateur, puis arrêter le conteneur. (absente de ce poste : enregistrer puis copier le fichier dans media/docker-conteneur-demo.mp4, voir docs/MEDIAS.md).

Transcription et texte alternatif

Script prévu, à ajuster à l'enregistrement. On annonce d'abord l'effet : la commande télécharge l'image nginx si elle est absente, démarre un conteneur en arrière-plan et publie le port 8080 uniquement sur la boucle locale. On la lance, puis docker container ls montre le conteneur demo-web. Dans le navigateur, l'adresse 127.0.0.1 port 8080 répond. On arrête avec docker stop demo-web ; grâce à l'option --rm le conteneur est supprimé à l'arrêt.

5. Images, docker pull et étiquettes

Sans étiquette, Docker utilise :latest. Une étiquette peut changer de contenu ; un condensat (digest SHA256) fige une version précise mais, selon la page, n'apporte plus les mises à jour de sécurité : compromis stabilité contre correctifs. docker pull télécharge depuis un registre (réseau, disque).

Exercice papier : pour trois noms d'images synthétiques, indiquer ce qui se passe sans étiquette, avec étiquette, avec digest.

6. Construire une image : Dockerfile

Instructions (référence Dockerfile) :

InstructionRôle
FROMimage de base ; un Dockerfile valide commence par FROM
RUNexécute des commandes et crée une nouvelle couche
COPYcopie fichiers du contexte de build vers l'image
CMDcommande par défaut du conteneur
ENTRYPOINTfait fonctionner le conteneur comme un exécutable
EXPOSEdocumente les ports d'écoute
USERutilisateur par défaut des instructions suivantes
WORKDIRrépertoire de travail
ENVvariable d'environnement présente pour les instructions suivantes
ARGvariable de build, non conservée dans l'image finale

Exemple synthétique à lire (non construit) :

Dockerfile
FROM <image-de-base-choisie>
WORKDIR /app
COPY . /app
USER <utilisateur-non-root>
CMD ["<commande>", "<argument>"]

EXPOSE ne publie rien : seul -p le fait (déduit des deux pages, à vérifier). Ne jamais mettre de secret dans ENV, ARG ou COPY : il resterait dans l'image et son historique (bonne pratique d'Orchestrator ; l'indication que ARG n'est pas embarqué est issue de la référence).

Construction : docker build --tag <nom>:<étiquette> . (forme citée par le tutoriel officiel). La page de référence indique que docker build utilise Buildx/BuildKit par défaut, que -t nomme l'image et que le contexte de build est le chemin donné (souvent .) ; un fichier .dockerignore exclut des fichiers du contexte.

  • Contexte : dossier contenant un Dockerfile et un contexte volontairement petit.
  • Droits : utilisateur normal.
  • Effet : crée une image locale (disque ; réseau si l'image de base est absente).
  • Vérification : docker image ls montre l'image.
  • Retour arrière : docker image rm <nom>:<étiquette> (commande non vérifiée dans une page consultée).

7. Volumes et données

D'après « Volumes » : les volumes sont le mécanisme préféré pour persister des données, gérés par Docker ; les bind mounts conviennent quand on a besoin d'un accès direct aux fichiers de l'hôte. À la destruction d'un conteneur sa couche inscriptible disparaît, mais les volumes persistent et ne sont pas supprimés automatiquement. Commandes citées : docker volume create, ls, inspect, rm, prune.

Attention, effet notable. Cette commande peut supprimer des fichiers, supprimer ou arrêter des conteneurs, images ou volumes. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
docker volume create demo-donneesdocker volume lsdocker volume rm demo-donnees
  • Contexte : Docker démarré.
  • Droits : utilisateur ayant accès au démon.
  • Effet : crée puis supprime un volume nommé vide ; rm détruit les données qu'il contient (ici aucune).
  • Vérification : docker volume ls montre puis ne montre plus demo-donnees.
  • Retour arrière : recréer un volume vide ; le contenu supprimé n'est pas récupérable. Ne jamais appliquer rm à un volume contenant des données réelles sans sauvegarde.

8. Entrer dans un conteneur et lire ses journaux

docker logs lit les journaux. docker exec exécute une commande dans un conteneur en cours d'exécution ; -it donne un terminal, -u choisit l'utilisateur. La commande exécutée n'est pas relancée si le conteneur redémarre. Une session exec peut modifier le conteneur : traiter comme une modification si on écrit des fichiers.

9. Nettoyer en connaissance de cause

  • docker container rm supprime un conteneur arrêté ; --force tue un conteneur en cours (SIGKILL) ; --volumes supprime les volumes anonymes associés, jamais les volumes nommés.
  • docker system prune supprime conteneurs arrêtés, réseaux inutilisés, images orphelines et cache de build inutilisé, après confirmation [y/N]. -a étend aux images inutilisées ; --volumes inclut les volumes anonymes.
  • docker compose down supprime conteneurs et réseaux du projet, pas les volumes nommés sauf -v/--volumes ; --rmi supprime des images.

Règle : ne lancer aucune commande de nettoyage sans avoir listé ce qu'elle affecterait, et jamais avec -a, --volumes ou -v sans accord et sauvegarde. Aucun exercice de ce cours ne lance system prune.

10. Docker Compose (notions)

Le tutoriel officiel présente Compose comme un moyen de piloter plusieurs conteneurs à partir d'un fichier compose.yaml. docker compose up construit, (re)crée, démarre et attache les conteneurs ; --build reconstruit les images ; --detach (-d) les lance en arrière-plan ; --remove-orphans supprime les conteneurs de services retirés du fichier. La syntaxe du fichier compose.yaml n'a pas été consultée dans cette session : non vérifié.

  • Contexte : dossier contenant un compose.yaml relu.
  • Droits : utilisateur ayant accès au démon.
  • Effet : crée des conteneurs, réseaux et éventuellement des images.
  • Vérification : docker compose ps (non vérifié) ou docker container ls.
  • Retour arrière : docker compose down (sans -v ni --rmi).

11. Sécurité

D'après « Docker security » : le démon nécessite les privilèges root, ce qui crée une surface d'attaque ; n'autoriser que des utilisateurs de confiance. Partager un dossier de l'hôte avec un conteneur n'est pas restreint. Exposer l'API du démon en HTTP exige TLS. Par défaut un conteneur reçoit un ensemble restreint de capacités. Le contenu de cette page est parfois ancien (références à des versions très anciennes) : confirmer sur la page à jour avant d'appliquer.

Règles pour Stéphane : publier les ports sur 127.0.0.1 ; pas de --privileged ; pas de secret dans les images ; épingler les versions d'images pour la reproductibilité en acceptant le coût de mise à jour ; ne jamais monter le dossier personnel entier.

12. Diagnostic de Docker Desktop

Le menu Troubleshoot propose Restart, Reset Kubernetes cluster, Clean up data (un reset de l'image disque détruit conteneurs et images locaux, en conservant les réglages) et Reset to factory defaults. docker desktop diagnose collecte des diagnostics ; sur macOS le fichier est de la forme /tmp/<identifiant>.zip. Ne pas fermer Docker Desktop pendant la collecte. Un diagnostic peut contenir des informations locales : ne pas le transmettre sans examen.

Exercices et vérifications de fin de cours

  1. Vocabulaire. Définir image, conteneur, couche, registre, volume.
  2. Lecture seule. Si Docker est déjà installé : docker container ls -a et docker image ls ; consigner ce qui est vu sans le publier.
  3. Dockerfile. Annoter chaque ligne de l'exemple du chapitre 6.
  4. Risques. Expliquer la différence entre -p 8080:80 et -p 127.0.0.1:8080:80 (la première forme expose sur toutes les interfaces selon la page).
  5. Cycle complet facultatif. Avec accord, exécuter l'exemple du chapitre 4 puis l'arrêter ; vérifier à chaque étape.
  6. Volume jetable. Créer puis supprimer demo-donnees.
  7. Nettoyage. Pour chacune de rm, system prune, compose down, dresser la liste de ce qui est supprimé et ce qui est conservé.

Critères de réussite

  • Distinguer image, conteneur et volume ; dire ce qui persiste après suppression.
  • Prévoir l'exposition réseau d'un -p.
  • Classer toute commande Docker en lecture, création, arrêt ou suppression.
  • Citer les versions de la source (Desktop 4.95.0, Engine 29.9.1) comme état documenté au 17 octobre 2026, sans les confondre avec la version installée.

Points non vérifiés ou à confirmer

  • Versions installées de Docker Desktop et Engine chez Stéphane ; macOS utilisé.
  • docker version, docker info, docker image rm, docker compose ps, alias ps / images : non consultés.
  • Forme 127.0.0.1:8080:80 du -p ; syntaxe de compose.yaml ; procédure de désinstallation de Docker Desktop.
  • Page « Docker security » aux références anciennes : à revalider.
  • Licence : lecture de la page, pas un avis juridique ; Stéphane doit confirmer qu'il relève de l'usage gratuit.

Sources officielles

Consultées le 17 octobre 2026.