Fort de votre expérience sur la gestion des couches des images Docker, vous prêtez attention aux couches des conteneurs arrêtés. Soit en créant un conteneur avec l’option --rm, soit en supprimant le conteneur plus tard.

Pourtant, malgré tous ces efforts pour libérer l’espace disque pris par Docker, ce dernier a encore pris le dessus et occupe une bonne partie de votre espace disque. Mais comment fait-il ?

Docker et les volumes

En surveillant, la taille du dossier /var/lib/docker, il est possible de constater que le répertoire volumes croit constamment… Un indice ?

Ayant fait récemment beaucoup de tests avec ElasticSearch sans préciser de montage de volume, je vérifie le dernier conteneur utilisé :

$ docker inspect myelk_elasticsearch_1|jq '.[].Mounts'
[
  {
    "Name": "b317451b5d154b1d6875af8abec9841c93cd52428109f55df734f53ef887f877",
    "Source": "/mnt/sda1/var/lib/docker/volumes/b317451b5d154b1d6875af8abec9841c93cd52428109f55df734f53ef887f877/_data",
    "Destination": "/usr/share/elasticsearch/data",
    "Driver": "local",
    "Mode": "",
    "RW": true
  }
]

Je suis alors très surpris de découvrir qu’un volume est monté alors je n’ai rien demandé à Docker. En vérifiant le Dockerfile d’ElasticSearch, je constate que l’instruction VOLUME correspond au dossier monté automatiquement. En fait, cette instruction permet d’indiquer à Docker qu’un dossier peut être partagé avec l’extérieur. Si aucun montage n’est spécifié à la création du conteneur, Docker le fait pour nous !

Il s’avère que le dossier /var/lib/docker/volumes contient énormément de volumes inutilisés. Dès qu’un Dockerfile utilise la commande VOLUME, Docker monte un répertoire. Cela pose déjà un souci de sécurité dans le sens où des données se retrouvent stockées ici sans vraiment le savoir. De plus, Docker prend de plus en plus d’espace disque avec le temps.

Suppression des volumes inutiles

La première étape est de supprimer tous les volumes orphelins avec une commande qui ne nous est pas étrangère maintenant :

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

Prenez le temps de vérifier que les volumes inutiles ne contiennent pas de données à conserver avant de lancer la suppression de tous ces volumes !

Suppression d’un conteneur et ses volumes

Vous aviez pris l’habitude de lancer des conteneur éphémères avec l’option --rm ? Il va maintenant prendre l’habitude d’ajouter l’option -v lorsque vous supprimez un conteneur :

$ docker rm -fv myelk_elasticsearch_1

Attention : cette commande supprime tous les volumes utilisés par le conteneur !

Conclusion

Nous avons encore progressé sur l’administration d’un environnement Docker. Les couches et les volumes sont des éléments qu’il faut donc monitorer et superviser. Cette découverte lève tout de même un problème sur la sécurité. En effet, il faut être extrêmement vigilant sur la gestion des VOLUMES et s’assurer qu’un environnement Docker ne contienne pas de données résiduelles sensibles si elles ne sont plus utiles.