(Article créé le 05 octobre 2016)
J'ai remarqué que chaque fois que j'exécute une image et la supprime, mon système ne revient pas à la quantité originale d'espace disponible.
Le cycle de vie sur lequel je travaille avec mes conteneurs est (exécuté sur un terminal mac par défaut):
> docker build ...
> docker run CONTAINER_TAG
> docker stop CONTAINER_TAG
> rm docker CONTAINER_ID
> rmi docker image_id
Les conteneurs créés à partir d'images personnalisées, exécutés à partir d'un nœud et d'un redis standard. Mon OS est OSX 10.11.6.
À la fin de la journée, je vois que je continue de perdre des Mbs. Comment puis-je faire face à ce problème?
POSTE MODIFIÉ
2020 et le problème persiste, et je pars et mets à jour à des fins d'aide communautaire.
Aujourd'hui en cours d'exécution:
Le moyen le plus simple de contourner le problème consiste à élaguer le système avec les utilitaires Docker.
docker system Prune -a --volumes
Il existe trois zones de stockage Docker qui peuvent être montées, car Docker est prudent - il n'en supprime pas automatiquement: les conteneurs sortants, les volumes de conteneurs inutilisés, les couches d'image inutilisées. Dans un environnement de développement avec beaucoup de construction et de fonctionnement, cela peut représenter beaucoup d'espace disque.
Ces trois commandes suppriment tout ce qui n'est pas utilisé:
docker rm $(docker ps -a -q)
- supprime les conteneurs arrêtésdocker rmi $(docker images -f "dangling=true" -q)
- supprime les calques d'image qui ne sont utilisés dans aucune imagedocker volume rm $(docker volume ls -qf dangling=true)
- supprime les volumes qui ne sont utilisés par aucun conteneur.Ils sont sûrs à exécuter, ils ne supprimeront pas les couches d'image référencées par les images ou les volumes de données utilisés par les conteneurs. Vous pouvez les alias et/ou les placer dans un travail CRON pour nettoyer régulièrement le disque local.
Docker sur Mac a un problème supplémentaire qui blesse beaucoup de gens: le fichier docker.qcow2 peut se développer hors de proportions (jusqu'à 64 Go) et ne se rétrécira jamais seul.
https://github.com/docker/for-mac/issues/371
Comme indiqué dans l'une des réponses de djs55, il est prévu de le corriger, mais ce n'est pas une solution miracle. Citation:
Le .qcow2 est exposé au VM en tant que périphérique de bloc avec une taille maximale de 64 Go. Comme de nouveaux fichiers sont créés dans le système de fichiers par des conteneurs, de nouveaux secteurs sont écrits sur le périphérique de bloc. Ces nouveaux les secteurs sont ajoutés au fichier .qcow2, ce qui augmente sa taille jusqu'à ce qu'il soit finalement entièrement alloué. Il cesse de croître lorsqu'il atteint cette taille maximale.
...
Nous espérons résoudre ce problème en plusieurs étapes: (notez que cela est encore au stade de la planification/conception, mais j'espère que cela vous donne une idée)
1) nous allons passer à un protocole de connexion qui prend en charge TRIM et implémenter le suivi des blocs libres dans un fichier de métadonnées à côté de qcow2. Nous allons créer un outil de compactage qui peut être exécuté hors ligne pour réduire le disque (un peu comme la conversion qemu-img mais sans le dd if =/dev/zero et il devrait être rapide car il saura déjà où se trouve l'espace vide )
2) nous automatiserons l'exécution de l'outil de compactage sur VM redémarre, en supposant qu'il soit assez rapide
3) nous allons passer à un compacteur en ligne (qui est un peu comme un GC dans un langage de programmation)
Nous cherchons également à rendre la taille maximale du .qcow2 configurable. Peut-être que 64 Go est trop grand pour certains environnements et qu'un plafond plus petit serait utile?
docker container Prune
docker system Prune
docker image Prune
docker volume Prune
Il convient également de mentionner que la taille du fichier de docker.qcow2 (ou Docker.raw sur High Sierra avec Apple Filesystem) peut sembler très grande (~ 64 Go), plus grande qu'elle ne l'est en réalité, lors de l'utilisation de la commande suivante:
ls -klsh Docker.raw
Cela peut être trompeur, car il affichera la taille logique du fichier plutôt que sa taille physique.
Pour voir la taille physique du fichier, vous pouvez utiliser cette commande:
du -h Docker.raw
Source: https://docs.docker.com/docker-for-mac/faqs/#disk-usage
Il existe plusieurs options sur la façon de limiter l'espace disque du docker, je commencerais par limiter/faire tourner les journaux: les journaux du conteneur Docker prenant tout mon espace disque
Par exemple. si vous avez une version Docker récente, vous pouvez la démarrer avec un --log-opt max-size=50m
option par conteneur. De plus, si vous avez d'anciens conteneurs inutilisés, vous pouvez envisager de consulter les journaux de docker qui se trouvent dans /var/lib/docker/containers/*/*-json.log