Épisode 08 / 9Passer au projet30 min
Entretenir et sécuriser Docker
Une installation Docker se remplit et vieillit. Mettre à jour sans perdre de données, faire le ménage sans supprimer l’essentiel, et les réglages de sécurité qui comptent vraiment.
Tapez les commandes dans PowerShell, avec Docker Desktop démarré : « Engine running » en bas à gauche.
Ajoutez sudo devant chaque commande docker, sauf si vous avez choisi le groupe docker à l’épisode 2.
Dans cet épisode
- Mesurer l’espace et les ressources avant de supprimer quoi que ce soit
- Mettre à jour un projet Compose sans perdre ses données, et savoir revenir en arrière
- Appliquer les réglages de sécurité qui comptent vraiment
Une installation Docker vit : les images s’accumulent, les services attendent leurs mises à jour, le disque se remplit. Deux dangers guettent, et ils sont opposés : supprimer la mauvaise chose, ou ne jamais rien mettre à jour. Une seule méthode évite les deux.
1. Regarder avant d’agir
Ces commandes ne suppriment rien :
docker system df
docker ps -a
docker volume ls
docker stats --no-stream
docker system df résume l’espace occupé par les images, les conteneurs, les
volumes et le cache de construction. Sa colonne RECLAIMABLE indique ce qui
pourrait être libéré : ce n’est pas une liste de choses à supprimer.
2. Mettre à jour un projet Compose
Entraînez-vous sur le projet de l’épisode 7 :
cd ~/docker-lab/compose-demo
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail 30
| Commande | Ce qu’elle fait |
|---|---|
docker compose pull | Télécharge les nouvelles versions des images. Rien ne change encore |
docker compose up -d | Remplace les conteneurs dont l’image ou la configuration a changé. Les volumes restent |
docker compose ps puis logs | Vérifie que tout est reparti, sans erreur |
Une mise à jour réussie ne se juge pas au message final : ouvrez réellement l’application.
Le tag alpine suit les nouvelles versions de Nginx : chaque pull peut en
apporter une. Pour un service important, préférez un tag qui fige la version,
dont la liste figure sur la page de l’image, sur Docker Hub. Vous choisissez
alors quand passer à la suivante, après avoir lu ses notes de version et fait
une sauvegarde. En cas de problème, remettre l’ancien tag dans compose.yaml
puis relancer docker compose up -d suffit à revenir en arrière.
3. Faire le ménage prudemment
Chaque commande de nettoyage vise quelque chose de précis :
| Commande | Ce qu’elle supprime |
|---|---|
docker container prune | Les conteneurs arrêtés |
docker image prune | Les images sans nom, restes d’anciennes constructions |
docker image prune -a | Toutes les images qu’aucun conteneur n’utilise |
docker builder prune | Le cache de construction |
docker system prune | Conteneurs arrêtés, réseaux inutilisés, images sans nom et cache |
Docker demande confirmation avant chacune : lisez l’avertissement. Et une
règle ne souffre aucune exception : tout ce qui contient le mot « volume »
peut effacer des données. docker volume prune, ou l’option --volumes
ajoutée à une autre commande, ne se lancent jamais par habitude, ni sans une
sauvegarde vérifiée.
4. Les réglages de sécurité qui comptent
- Des images de confiance. Sur Docker Hub, préférez les badges « Docker Official Image » et « Verified Publisher ». Une image inconnue, c’est du code inconnu qui tourne chez vous.
- Le moins de ports possible. Pas de
-ppour un service interne,127.0.0.1pour un outil personnel. L’épisode 6 détaille le raisonnement. - Pas de secret dans une image ni dans Git. Les mots de passe vont dans un
fichier
.env, à côté decompose.yaml; Compose le lit tout seul. - Ni
--privileged, ni socket Docker monté. Donner à un conteneur l’accès à/var/run/docker.sock, c’est lui donner les clés de toute la machine. Certains outils le demandent : faites-le seulement si vous savez pourquoi. - Des mises à jour régulières, de Docker lui-même comme de vos images.
Voici à quoi ressemble un mot de passe bien rangé. Dans compose.yaml :
services:
base:
image: postgres:18
environment:
POSTGRES_PASSWORD: ${MOT_DE_PASSE_BASE}
Et dans le fichier .env, dans le même dossier :
MOT_DE_PASSE_BASE=une-longue-phrase-aleatoire
Le fichier compose.yaml peut alors être partagé ou versionné sans rien
révéler. Ajoutez .env à votre .gitignore et à votre .dockerignore.
Côté Windows
Docker Desktop signale lui-même ses mises à jour : installez-les, elles corrigent régulièrement des failles. Pour dépanner, redémarrer Docker Desktop règle beaucoup de choses. Le menu de dépannage propose aussi des remises à zéro, dont Reset to factory defaults : elles effacent toutes les images, tous les conteneurs et tous les volumes. C’est le dernier recours, jamais le premier.
Côté Ubuntu
Docker Engine vient du dépôt ajouté à l’épisode 2 : il se met à jour avec le reste du système.
sudo apt update && sudo apt upgrade
Quand le moteur lui-même semble en cause, son état et son journal disent pourquoi :
systemctl status docker --no-pager
sudo journalctl -u docker --since "10 minutes ago" --no-pager
Et rappelez-vous : le groupe docker vaut des droits d’administrateur. Sur une
machine partagée, n’y ajoutez personne à la légère.
Quand quelque chose ne va pas
Un conteneur qui redémarre en boucle n’est qu’un symptôme : la cause est
presque toujours une erreur de configuration, de droits ou d’accès aux données.
Le recréer dix fois n’y change rien. Suivez la boucle : lisez l’état
(docker compose ps), puis les journaux (docker compose logs), puis la
configuration (docker compose config). Et changez une seule chose à la
fois : sinon, vous ne saurez jamais laquelle a réglé le problème.
Testez-vous
3 questions pour vérifier que l’essentiel est acquis. Rien n’est noté ni enregistré.
Quelle commande montre ce qui occupe l’espace, sans rien supprimer ?
df mesure, prune supprime. On commence toujours par mesurer : la colonne RECLAIMABLE dit ce qui pourrait être libéré, pas ce qu’il faut libérer.
Après docker compose pull, le service utilise-t-il déjà la nouvelle image ?
pull ne fait que télécharger. Le conteneur en marche garde son image jusqu’à ce que up -d le remplace par un conteneur neuf, créé depuis la nouvelle.
Où ranger le mot de passe d’une base de données ?
Tout ce qui entre dans une image peut être relu par quiconque la récupère. Le fichier .env reste sur la machine, hors de Git et hors du dossier de construction.
Vérifier que tout fonctionne
Cochez au fur et à mesure : quand tout est coché, vous pouvez passer à la suite.
Problèmes courants
Le disque se remplit
Commencez par docker system df pour savoir quoi : les images et le cache de construction sont les suspects habituels. docker image prune puis docker builder prune libèrent souvent beaucoup, sans toucher aux données. Lisez chaque avertissement avant de confirmer.
Après une mise à jour, le service redémarre en boucle
Lisez ses journaux avec docker compose logs. Si la nouvelle version est en cause, remettez l’ancien tag dans compose.yaml et relancez docker compose up -d. Si la mise à jour a modifié les données, c’est la sauvegarde faite juste avant qui vous sauve.
Windows : le menu de dépannage propose « Reset to factory defaults »
C’est le tout dernier recours : cette remise à zéro efface toutes les images, tous les conteneurs et tous les volumes. Sauvegardez d’abord vos volumes avec la méthode de l’épisode 5.
Ubuntu : où lire les erreurs du moteur Docker lui-même ?
Dans le journal du système : sudo journalctl -u docker --since "10 minutes ago" --no-pager. Copiez le message exact avant de modifier quoi que ce soit.
Votre progression reste sur cet appareil, rien n’est envoyé.