Attention : les différentes commandes ci-dessous vont effectuer des suppressions sur des données stockées par Docker. En temps normal, ce n’est pas un problème car les données qu’il faut conserver ne sont pas gardées dans les containers ou les images. Toutefois, les logs des logiciels exécutés dans les containers ne sont généralement pas partagés, si vous souhaitez en garder une trace, il faut aller les récupérer.

Prune

Depuis la version 1.13 de Docker, une nouvelle commande fait son apparition : prune. Elle permet d’effacer les données non utilisées. Elle s’applique à deux cas, aux données des containers qui sont généralement non désirées et au “système” de Docker qui regroupe les containers, les images et les volumes.

Faisons le ménage :

docker container prune

docker system prune -a

Pour les versions moins récentes

Attention : Pour les commandes suivantes, si vous avez un retour du genre : "docker rm" requires at least 1 argument(s). c’est parce que la liste est vide. Cela signifie qu’aucune donnée n’est à effacer.

Effacer les données des containers

docker rm -v $(docker ps -a -q -f "status=exited")

La commande ps va lister tous les containers (l’option -a pour tous) qui sont stoppés (l’option -f pour filtrer et "status=exited"), si vous en avez en cours d’exécution ce n’est donc pas un problème. L’option -q fera en sorte de ne lister que les identifiants des containers, au lieu d’avoir toutes les informations. Une fois la liste obtenue la commande rm va procéder à l’effacement de celle-ci. L’option -v permet également d’effacer des volumes liés aux containers pour éviter qu’ils ne deviennent orphelins.

Effacer les données des images non utilisées

docker rmi $(docker images -f "dangling=true" -q)

La liste des données des images est faite avec un filtre sur “dangling”. Si vous listez les images Docker, vous tomberez sur les images ayant pour nom <none>:<none>, il s’agit d’une couche pour une image qui n’est plus utilisée. Cela peut provenir de la construction d’une image ou d’un changement de référence sur une des images que vous utilisez, ces données sont dites “dangling”. Comme pour les containers, l’option -q fera en sorte de ne lister que les identifiants des images.

Effacer les volumes

À partir de la version 1.9 de Docker, les volumes font leur apparition et ne peuvent être effacés qu’avec une commande du style :

docker volume rm $(docker volume ls -q -f "dangling=true")

Conclusion

Bon ménage :)