Si vous utilisez docker vous avez surement remarqué que l'espace disque utilisé augmente rapidement. Voici quelques règles pour économiser un peu de place sur votre disque.
Supprimer les volumes associés à un conteneur
Lorsqu'on supprime un conteneur penser à utiliser l'option -v qui permet de supprimer les volumes associés à un conteneur.
Pour supprimer tous les conteneurs qui ne tournent pas on peut utiliser la commande suivante:
docker rm -v $(docker ps -aqf status=exited)
Recréé un conteneur est assez rapide du moment que son image est disponible. Ce qui nous amène vers le nettoyage des images inutiles.
Supprimer les images inutiles
J'appelle image "inutile" une image "intermédiaire" qui sert dans la construction d'une image "finale" et qui n'est donc jamais utilisé pour créer un conteneur.
On peut supprimer ces images avec la commande suivante:
docker rmi $(docker images -qf dangling=true)
Souvent indispensable après un docker pull.
Supprimer les volumes orphelins
Un volume orphelin est un volume pour lequel son conteneur associé a été supprimé sans l'option -v. Pour supprimer ces volumes on a la commande suivante:
docker volume rm $(docker volume ls -qf dangling=true)
Ok, utilisons un volume
Maintenant que vous avez compris le principe, sachez que docker peut vous permettre de créer un volume sans passer par un conteneur. C’est là que je veux en venir !
Prenons un exemple que j’utilise beaucoup, un conteneur mongo dont je ne veux pas perdre les données. J’utilisais, avant, un répertoire perso pour y stocker les données.
Plus tard, j’ai utilisé un conteneur data-only, ce qui fonctionne bien, je ne dis pas le contraire. L’image mongo déclare un volume “/data/db”, donc je n’avais qu’à faire:
docker run --name mongodata -v /data/db -it -d busybox
docker run --rm -it --volumes-from mongodata mongo
Oui, mais c’est bête !
Voilà la meilleure façon de faire:
docker volume create --name mongodata
docker run --rm -it -v mongodata:/data/db mongo
Cette fois, je définis où je monte le volume, et je n’ai qu’un seul conteneur qui tourne: le conteneur mongo. Le volume est local (par défaut) et se trouve ici:
$ docker volume inspect mongodata
[
{
"Name": "mongodata",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/mongodata/_data"
}
]
C’est bien plus efficace et ça limite largement le nombre de conteneurs à démarrer. On notera aussi la facilité à retrouver les volumes par leurs noms.
pour aller plus loin: https://docs.docker.com/engine/tutorials/dockervolumes/