Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:docker:admin:nettoyer_docker [2020/10/13 23:34] – qduchemi | technique:docker:admin:nettoyer_docker [2022/10/29 12:02] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 15: | Ligne 15: | ||
- Augmenter la taille des disques de la machine virtuelle. | - Augmenter la taille des disques de la machine virtuelle. | ||
- | ## Prune | + | ## Nettoyage des données non-utilisées |
- | ## Mener une enquête | + | |
- | On peut commencer | + | < |
+ | |||
+ | Au fil des mises à jour, il y a du stockage pris par Docker qui n'est plus utilisé. | ||
+ | |||
+ | < | ||
+ | |||
+ | * Les images qui ont été récupérées mais ne sont plus utilisées (*e.g.* ancienne version), les images dites *dangling* (anciens *layers* d'un tag qui ont été écrasées par une nouvelle version du même tag). | ||
+ | * Les conteneurs éteints mais pas supprimés, qui consomment du stockage si des modifications ont été apportées aux images de base. | ||
+ | * Les volumes Docker qui ne correspondent plus à aucun conteneur. | ||
+ | * Les réseaux Docker utilisés par aucun conteneur. | ||
+ | * Le cache des images. | ||
+ | |||
+ | On peut obtenir une estimation de l' | ||
+ | |||
+ | ```bash | ||
+ | docker system df | ||
+ | ``` | ||
+ | |||
+ | Afin de supprimer l' | ||
+ | |||
+ | < | ||
+ | ``` | ||
+ | docker ps --filter " | ||
+ | ``` | ||
+ | On peut utiliser le [[technique: | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | ```bash | ||
+ | docker system prune | ||
+ | ``` | ||
+ | |||
+ | Inspectez le résultat de la commande et vérifiez que ce qui a été supprimé n' | ||
+ | |||
+ | ```bash | ||
+ | docker volume prune -a | ||
+ | ``` | ||
+ | |||
+ | Il faut aussi rajouter une commande pour supprimer toutes les images non-associées à un conteneur : | ||
+ | |||
+ | ```bash | ||
+ | docker image prune -a | ||
+ | ``` | ||
+ | |||
+ | ## Recherche d'un stockage inhabituel | ||
+ | |||
+ | ### Première tentative | ||
+ | |||
+ | Si le stockage récupéré n'est pas suffisant, on peut regarder si un conteneur n' | ||
+ | |||
+ | La commande suivante permet de lister le stockage utilisé par chaque conteneur, image et volume : | ||
+ | |||
+ | ```bash | ||
+ | docker system df -v | ||
+ | ``` | ||
+ | |||
+ | Ensuite, on traite au cas par cas. On peut par exemple découvrir des services qui tournent alors qu'ils n'ont plus rien à faire là (dans ce cas on les éteindra et on relancera un `prune`), ou des conteneurs qui prennent trop de place (par exemple, parce qu'ils loggent dans un fichier en mode `DEBUG`). | ||
+ | |||
+ | De manière générale, un conteneur ne devrait jamais utiliser plus Go d' | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Recherche supplémentaire | ||
+ | |||
+ | < | ||
+ | |||
+ | Franchement, | ||
< | < | ||
Ligne 31: | Ligne 97: | ||
On voit ainsi quels sont les éléments qui occupent le plus de place en mémoire, par exemple : | On voit ainsi quels sont les éléments qui occupent le plus de place en mémoire, par exemple : | ||
+ | |||
* `volumes` pour le contenu persistant des conteneurs (bases de données par exemple) | * `volumes` pour le contenu persistant des conteneurs (bases de données par exemple) | ||
* `overlay2` pour les conteneurs | * `overlay2` pour les conteneurs | ||
Une fois que l'on a déterminé le dossier qui prend le plus de place, | Une fois que l'on a déterminé le dossier qui prend le plus de place, | ||
+ | |||
On peut regarder par exemple quels sont les dix plus gros fichiers les plus gros dans `/ | On peut regarder par exemple quels sont les dix plus gros fichiers les plus gros dans `/ | ||
``` | ``` | ||
du -sh / | du -sh / | ||
``` | ``` | ||
- | Mais cette commande ne nous donne pas d' | ||
- | ``` | ||
- | for overlayID in $(du -sh / | ||
- | ``` | ||
- | En gros, cette commande récupère les ID des containeurs qui prennent le plus de place, puis pour chacun d'eux elle fait correspondre depuis la liste des conteneurs de la machine le nom du containeur via la sortie json de la commande docker inspect. | ||
- | Si un conteneur prend plusieurs Go de mémoire, c'est mauvais signe : les données devraient être dans un volume, il doit y avoir un souci. Typiquement, | + | Mais cette commande ne nous donne pas d'information exploitable sur les conteneurs qui prennent le plus de place, il faut donc utiliser cette commande pour faire correspondre les noms (à adapter si on regarde plutôt |
- | On peut utiliser des commandes similaires pour les volumes. | ||
- | |||
- | On peut également regarder si le registre ne prend pas trop de place `du -sh / | ||
- | |||
- | ===== Supprimer ce qui ne sert à rien ===== | ||
- | Une fois cette petite enquête menée on va pouvoir commencer par éteindre ce qui ne sert à rien (attention à ne pas éteindre n' | ||
- | |||
- | On peut maintenant lancer une commande qui supprime tout ce qui n'est pas utilisé par docker (réseaux, images, containeurs et volumes) : | ||
``` | ``` | ||
- | docker | + | for overlayID in $(du -sh /var/lib/docker/overlay2/* | sort -rh | head -10 | grep -P -o " |
``` | ``` | ||
- | **/!\Faire attention en production/ | ||
- | ===== Augmenter la taille du Logical Volume monté sur /var ===== | + | On peut utiliser des commandes similaires pour les volumes. |
- | Il s'agit soit d'attribuer toute la place restante au LV puis de redimensionner le système de fichier sous jacent pour suivre (ext4) avec | + | < |
- | ``` | + | |
- | lvextend -l +100%FREE --resizefs / | + | |
- | ``` | + | |
- | soit de spécifier | + | |
- | ``` | + | |
- | lvextend -L 10G --resizefs | + | |
- | ``` | + | |
- | ===== Augmenter | + | ## Augmenter |
- | S' | + | Si aucune des solutions précédentes |
- | {{ : | + | |
- | puis il faut augmenter la taille de la partition qui sert de PV pour LVM (le disque entier ne sert pas car d' | + |