Objectifs d'apprentissage
À la fin de ce cours, l'apprenant peut :
- expliquer client, démon, registre, image, conteneur ;
- lire un
Dockerfileet distinguerRUN,CMD,ENTRYPOINT,ENV,ARG; - construire une image et lancer un conteneur en connaissant les effets de
-d,-p,-v,--rm; - inspecter l'état (
ps,images,logs,exec) en lecture ; - distinguer volumes, bind mounts et couche inscriptible d'un conteneur ;
- décrire ce que suppriment
rm,system pruneetcompose down; - 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 :
| Commande | Rô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.
docker container ls -adocker image lsBloc actif : la touche C copie la commande seule, sans invite ni sortie.
- 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
La référence de docker container run décrit :
-d: exécution en arrière-plan, renvoie l'identifiant du conteneur ;-it:-igarde l'entrée standard ouverte,-talloue 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 ;--restartcombiné à--rmproduit une erreur ;--privilegeddonne 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.
docker run --rm -d --name demo-web -p 127.0.0.1:8080:80 nginxBloc actif : la touche C copie la commande seule, sans invite ni sortie.
- Contexte : Docker Desktop démarré. Cette commande ne figure pas telle quelle dans les pages consultées ; elle assemble
-d,--rm,--name,-pet l'imagenginx(citée dans la page « Run containers ») et la forme127.0.0.1:8080:80n'a pas été vérifiée : non vérifié, relire la référence. - Droits : utilisateur normal.
- Effet : télécharge l'image
nginxdu 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 lsmontredemo-web; ouvrirhttp://127.0.0.1:8080dans 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) :
| Instruction | Rôle |
|---|---|
FROM | image de base ; un Dockerfile valide commence par FROM |
RUN | exécute des commandes et crée une nouvelle couche |
COPY | copie fichiers du contexte de build vers l'image |
CMD | commande par défaut du conteneur |
ENTRYPOINT | fait fonctionner le conteneur comme un exécutable |
EXPOSE | documente les ports d'écoute |
USER | utilisateur par défaut des instructions suivantes |
WORKDIR | répertoire de travail |
ENV | variable d'environnement présente pour les instructions suivantes |
ARG | variable de build, non conservée dans l'image finale |
Exemple synthétique à lire (non construit) :
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
Dockerfileet 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 lsmontre 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.
docker volume create demo-donneesdocker volume lsdocker volume rm demo-donneesBloc actif : la touche C copie la commande seule, sans invite ni sortie.
- Contexte : Docker démarré.
- Droits : utilisateur ayant accès au démon.
- Effet : crée puis supprime un volume nommé vide ;
rmdétruit les données qu'il contient (ici aucune). - Vérification :
docker volume lsmontre puis ne montre plusdemo-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 rmsupprime un conteneur arrêté ;--forcetue un conteneur en cours (SIGKILL) ;--volumessupprime les volumes anonymes associés, jamais les volumes nommés.docker system prunesupprime 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 ;--volumesinclut les volumes anonymes.docker compose downsupprime conteneurs et réseaux du projet, pas les volumes nommés sauf-v/--volumes;--rmisupprime 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.yamlrelu. - 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é) oudocker container ls. - Retour arrière :
docker compose down(sans-vni--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
- Vocabulaire. Définir image, conteneur, couche, registre, volume.
- Lecture seule. Si Docker est déjà installé :
docker container ls -aetdocker image ls; consigner ce qui est vu sans le publier. - Dockerfile. Annoter chaque ligne de l'exemple du chapitre 6.
- Risques. Expliquer la différence entre
-p 8080:80et-p 127.0.0.1:8080:80(la première forme expose sur toutes les interfaces selon la page). - Cycle complet facultatif. Avec accord, exécuter l'exemple du chapitre 4 puis l'arrêter ; vérifier à chaque étape.
- Volume jetable. Créer puis supprimer
demo-donnees. - 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, aliasps/images: non consultés.- Forme
127.0.0.1:8080:80du-p; syntaxe decompose.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.