URL: https://linuxfr.org/users/chat_de_sorciere/journaux/un-ramasse-miette-pour-docker Title: Un ramasse-miette pour docker Authors: Michaël Date: 2015年11月10日T12:34:20+01:00 License: CC By-SA Tags: docker et autopromo Score: 26 Lorsqu'on utilise *docker* pour déployer une application, la routine de maintenance des machines hébergeant les *containers* doit inclure un *ramasse-miette* dont la tâche est de se débarrasser des images obsolètes devenues inutiles. Si cet aspect de la maintenance est ignoré, en fonction de la fréquence des déploiements, de la taille des images et de l'espace disque disponible, le disque peut se remplir en quelques semaines voire en quelques heures. Pour résoudre ce problème une bonne fois pour toutes, j'ai écrit un [ramasse-miette](https://github.com/michipili/dockertk) très flexible pour *docker*. La procédure suit deux étapes. Dans la première, les *containers* qui ne sont pas marqués *running* sont effacés ; dans la seconde une règle de nettoyage est appliquée pour déterminer quelles images présentes dans la bibliothèque locale sont obsolètes et doivent être effacées. Les règles de nettoyage associent des prédicats sur les images à des actions, et peuvent être librement fixées. Il est facile d'inscrire le ramasse-miette dans le *crontab(5)* ou bien de le lancer avant les procédures préparant les nouvelles images. ## Règles de nettoyage Voici un exemple de règles de nettoyage, à inscrire dans le fichier `~/.docker/docker_gc.conf`: ``` Dandling : Delete Not(Age(3)) : PreserveAll Repository("organisation/repo") : PreserveRecent(3) True : Delete ``` elles demandent: - L'effacement toutes les images feuilles qui ne sont pas associées à un *repository*. - La préservation de toutes les images crées il y a moins de trois jours. - La préservation d'au plus 3 images dans le *repository* `organisation/repo` — les images préservées par la règle précédente participent au comptage. - L'effacement de toutes les autres images. Les prédicats (membres de gauche dans le fichier de configuration ci-dessus) peuvent-être combinés arbitrairement à l'aide des connecteurs `Or` et `And`. ## Utilisation dans le *crontab* J'utilise ce programme en production sur des *clusters* dédiés au déploiement avec *docker*, en déclenchant le ramasse-miette toutes les heures: ``` CAML_LD_LIBRARY_PATH=/opt/opam/system/lib/stublibs:/usr/lib64/ocaml/stublibs 12 * * * * docker-user env HOME=/home/docker-user /opt/local/bin/docker_gc -v>> /opt/local/var/log/docker_gc.log 2>&1 ``` (La ligne `CAML_LD_LIBRARY_PATH` doit diriger vers le dossier approprié de votre installation *opam*.) ## Utilisation dans la production des images Le ramasse-miette n'interagit pas bien avec la production d'images. Sur les serveurs dédiés à la préparation des images, il est facile et préférable d'intégrer le ramasse-miette comme préliminaire à la procédure de production des images. ## Installation Pour installer, le plus simple est d'utiliser *opam*. Comme quelques PRs sont en retard, il faut installer les paquets [lemonade](https://github.com/michipili/lemonade), [rashell](https://github.com/michipili/rashell), [gasoline](https://github.com/michipili/gasoline), à partir du *repository*, la petite boucle shell suivante automatise tout cela: ``` for repo in lemonade rashell gasoline dockertk; do git clone "https://github.com/michipili/${repo}" "${repo}" (cd "${repo}" && autoconf) opam pin add "${repo}" "${repo}" done ```