Docker prend de la place sur Mac : mesurer, nettoyer, limiter

Publié le 9 min de lecture

Docker Desktop range tout dans un seul gros fichier disque, qui grossit sans jamais maigrir seul. On mesure ce qui pèse, on vide ce qui ne sert plus avec les commandes de Docker, puis on fixe une limite. Sans toucher aux volumes, qui gardent tes données.

Tu as installé Docker Desktop pour un projet. Quelques mois plus tard, ton disque est plein, et tu ne vois pas pourquoi. Docker garde tout ce que tu as téléchargé ou construit : images, conteneurs arrêtés, cache de compilation, volumes. Rien ne part tout seul.

Docker le dit lui-même : il ne supprime ses objets inutilisés que si tu le lui demandes. Il donne aussi les outils pour le faire. On mesure, puis on vide, du plus sûr au plus délicat.

1. Pourquoi Docker pèse autant sur un Mac

Sur un Mac, Docker ne range pas ses fichiers un par un. Il fait tourner une petite machine virtuelle Linux, et tout ce qu'elle contient vit dans un seul gros fichier : le disque virtuel. D'après la FAQ de Docker pour Mac, conteneurs et images sont stockés dans ce fichier unique.

Dedans, on trouve quatre familles :

  • les images, les modèles téléchargés ou construits à partir desquels tu lances tes conteneurs ;
  • les conteneurs, y compris ceux qui sont arrêtés : Docker précise qu'un conteneur arrêté garde sa couche d'écriture, et qu'elle prend de la place ;
  • le cache de build, ce que Docker garde pour reconstruire tes images plus vite ;
  • les volumes, les dossiers où tes conteneurs rangent leurs données : une base de données, des fichiers envoyés, etc.

Les trois premières se retéléchargent ou se reconstruisent. Les volumes, non. On y revient à l'étape 4, parce que c'est là qu'on peut perdre quelque chose.

2. Mesurer la vraie taille du disque virtuel

Premier piège : la taille que tu vois n'est pas forcément la bonne. Docker prévient que beaucoup d'outils affichent la taille maximum du fichier, pas la place qu'il occupe vraiment.

Le plus simple est de demander à Docker lui-même. Ouvre Docker Desktop, puis Settings (l'icône Settings du Dashboard, ou le menu Docker en forme de baleine). Va dans Resources, puis Advanced. Selon la FAQ, cet onglet montre l'emplacement du disque virtuel, sa taille maximum et la place qu'il prend réellement.

Tu préfères le Terminal ? La FAQ donne le chemin du fichier, nommé Docker.raw, et la commande qui affiche sa taille réelle :

cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
ls -klsh Docker.raw

Le premier nombre de la ligne est la place réelle, en kilo-octets. Le chiffre en Go plus loin, c'est la taille maximum. Dans l'exemple de Docker, le fichier occupe environ 2,3 Go pour un maximum de 64 Go. Si tu as changé l'emplacement du disque virtuel dans les réglages, le chemin est différent : celui affiché dans Resources > Advanced fait foi.

3. Voir ce qui pèse dans Docker

Regarde maintenant ce qu'il y a dedans. Docker Desktop lancé, tape dans le Terminal :

docker system df

La commande docker system df affiche un petit tableau : images, conteneurs, volumes locaux et cache de build. Pour chaque ligne, tu vois le nombre total, le nombre en service (colonne ACTIVE), la taille, et surtout RECLAIMABLE : la place que tu peux récupérer sans toucher à ce qui sert.

Pour le détail, ajoute -v : la commande liste chaque image, chaque conteneur et chaque volume avec sa taille. Deux commandes complètent le tableau :

docker image ls
docker container ls -a

La seconde montre aussi les conteneurs arrêtés.

4. Nettoyer avec docker system prune

C'est la commande que Docker met en avant dans sa FAQ :

docker system prune

Avant d'agir, elle affiche ce qu'elle va retirer et te demande de confirmer. D'après la référence de la commande : tous les conteneurs arrêtés, les réseaux qu'aucun conteneur n'utilise, les images pendantes et le cache de build inutilisé. Une image pendante, c'est une image sans étiquette qu'aucun conteneur n'utilise : souvent une vieille version restée après une reconstruction.

Docker prévient qu'il faut parfois quelques minutes pour que le Mac récupère la place.

Les variantes, de la plus douce à la plus large :

  • docker container prune retire seulement les conteneurs arrêtés ;
  • docker image prune -a retire toutes les images qu'aucun conteneur n'utilise, pas seulement les pendantes : il faudra les retélécharger au prochain lancement ;
  • docker builder prune vide seulement le cache de build, sans toucher aux conteneurs ni aux images ;
  • docker system prune -a fait tout cela d'un coup.

Tu peux aussi filtrer par âge. docker system prune --filter "until=24h" ne retire que ce qui a été créé il y a plus de 24 heures, d'après la page de Docker sur le nettoyage des objets inutilisés.

Les volumes : la seule vraie précaution

Par défaut, aucune de ces commandes ne touche aux volumes. C'est voulu : Docker explique qu'il ne les supprime jamais automatiquement, parce que cela pourrait détruire des données. Un volume, c'est peut-être la base de données de ton projet.

L'option --volumes de docker system prune retire les volumes anonymes qu'aucun conteneur n'utilise. Les volumes nommés restent, sauf si tu lances docker volume prune --all. Avant ça, liste-les avec docker volume ls. Un volume dont tu ne sais pas à quoi il sert, garde-le.

5. Pourquoi le disque ne rétrécit pas toujours

Tu as supprimé des fichiers à l'intérieur d'un conteneur, et le disque virtuel n'a pas bougé ? C'est normal. D'après la FAQ, la place n'est rendue que quand tu supprimes des images. Effacer des fichiers dans un conteneur qui tourne ne libère rien automatiquement.

Pour forcer le Mac à récupérer la place à n'importe quel moment, Docker donne cette commande :

docker run --privileged --pid=host docker/desktop-reclaim-space

Elle lance une image fournie par Docker, qui s'occupe de la récupération. Refais ensuite la mesure de l'étape 2 pour voir la différence.

6. Limiter la taille du disque virtuel

Une fois le ménage fait, tu peux poser un plafond. Dans Settings > Resources > Advanced, la page des réglages de Docker Desktop décrit le réglage Disk usage limit : l'espace disque maximum que le moteur peut utiliser. La FAQ pour Mac parle d'un curseur Disk image size, à baisser puis à valider avec Apply.

Attention, c'est le point qui coûte cher. Docker l'écrit clairement : quand tu réduis la taille maximum, le disque virtuel actuel est supprimé, et avec lui tous les conteneurs et toutes les images. Pense à la sauvegarde de l'étape 7 avant de toucher à ce curseur.

Le même onglet propose aussi Disk image location, pour déplacer le disque virtuel sur un disque plus grand. Choisis Browse, puis le nouvel emplacement, puis Apply. Docker insiste : ne déplace jamais ce fichier à la main dans le Finder, sinon Docker Desktop risque de ne plus le retrouver.

7. Repartir de zéro avec Clean up data

Si tout est trop encombré pour trier, Docker Desktop a une option radicale. Ouvre le menu Troubleshoot : l'icône en forme de point d'interrogation en haut à droite du Dashboard, ou le menu Docker. D'après la page de dépannage, l'option Clean up data réinitialise le disque virtuel : tous les conteneurs et toutes les images de ton Mac sont détruits, tes réglages sont gardés.

Avant, sauvegarde ce qui compte. Docker donne la méthode dans sa page de sauvegarde et restauration : envoie tes images vers un registre avec docker push, ou enregistre-les dans un fichier avec docker image save -o images.tar suivi du nom des images. Et n'oublie pas les volumes qui contiennent des données.

Le même menu propose Reset to factory defaults, qui remet toutes les options de Docker Desktop comme au premier jour.

8. Désinstaller Docker Desktop si tu n'en as plus besoin

Tu ne fais plus de Docker ? La désinstallation rend toute la place. Docker prévient : elle détruit les conteneurs, les images, les volumes et toutes les données Docker de ton Mac. Sauvegarde d'abord.

La méthode de Docker pour désinstaller Docker Desktop sur Mac :

  1. Ouvre Docker Desktop.
  2. Clique sur l'icône Troubleshoot en haut à droite du Dashboard.
  3. Choisis Uninstall, puis confirme avec Uninstall une seconde fois.
  4. Mets ensuite l'app Docker à la Corbeille.

Par le Terminal, la commande /Applications/Docker.app/Contents/MacOS/uninstall fait la même chose. Si elle affiche « operation not permitted » sur le dossier com.docker.docker, Docker dit que la désinstallation a quand même réussi. Ce dossier pourra être retiré plus tard, une fois l'accès complet au disque donné au Terminal.

Restent deux dossiers à supprimer toi-même : ~/Library/Group Containers/group.com.docker et le dossier caché ~/.docker de ton dossier personnel. Pour y aller dans le Finder, utilise Aller > Aller au dossier, comme l'explique le guide macOS. Pour la méthode générale, notre guide pour désinstaller une application sur Mac détaille le reste.

Disque toujours plein ? Fais le tour avec notre guide Stockage Mac plein. Si tu développes aussi pour iPhone, Xcode a ses propres gros dossiers : voir Xcode prend trop de place.

Ce que CleanMochi fait, et ne fait pas, avec Docker

CleanMochi, c'est l'app que nous faisons pour les Mac. Il ne lance aucune commande docker, ne lit pas le disque virtuel et ne le réduit pas. Les étapes 2 à 7 se font avec Docker lui-même.

Son écran Gros fichiers ne voit pas non plus Docker.raw : il ne fouille pas la Bibliothèque ni les dossiers cachés comme ~/.docker. Et dans Nettoyage, la catégorie « Restes d'apps désinstallées » laisse toujours de côté les dossiers dont le nom commence par com.docker, même quand Docker n'est plus là. Ils peuvent servir aux outils en ligne de commande, alors CleanMochi n'y touche pas.

Une seule chose concerne Docker : la désinstallation. Dans l'écran Applications, quand tu choisis une app, CleanMochi cherche dans ta Bibliothèque les dossiers qui portent son nom ou son identifiant. Il te montre la liste, puis met l'app et ces dossiers à la Corbeille, avec un bouton « Annuler ». Il ne cherche pas en dehors de la Bibliothèque : le dossier ~/.docker reste à retirer à la main. Et comme rien n'est sauvegardé, vide la Corbeille seulement quand tu es sûr de ne plus avoir besoin de tes volumes.

À lire aussi

Questions fréquentes

Pourquoi Docker prend-il autant de place sur mon Mac ?

Docker Desktop range images, conteneurs, cache de build et volumes dans un seul fichier disque virtuel. Il ne supprime rien de lui-même : les vieilles images et les conteneurs arrêtés s'accumulent jusqu'à ce que tu les retires.

Où se trouve le fichier Docker.raw ?

Par défaut dans ~/Library/Containers/com.docker.docker/Data/vms/0/data, d'après la FAQ de Docker pour Mac. Son emplacement exact est affiché dans Settings > Resources > Advanced, ligne Disk image location.

docker system prune supprime-t-il mes données ?

Il retire les conteneurs arrêtés, les réseaux inutilisés, les images pendantes et le cache de build. Les volumes restent, sauf si tu ajoutes --volumes, qui ne vise que les volumes anonymes inutilisés. Les volumes nommés ne partent qu'avec docker volume prune --all.

Pourquoi le disque virtuel ne rétrécit-il pas après un nettoyage ?

La place n'est rendue que quand des images sont supprimées, et le Mac peut mettre quelques minutes à la récupérer. Docker donne la commande docker run --privileged --pid=host docker/desktop-reclaim-space pour forcer la récupération.

Réduire la limite de disque efface-t-il mes conteneurs ?

Oui. Docker précise que réduire la taille maximum supprime le disque virtuel actuel, donc tous les conteneurs et toutes les images. Sauvegarde tes images avec docker push ou docker image save avant.

Article rédigé par l'équipe de CleanMochi (AppsMochi, une marque de NORY LLC). Une erreur, un chemin qui a changé avec une nouvelle version de macOS ? Dis-le nous.