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édenteDernière révisionLes deux révisions suivantes | ||
technique:docker:admin:nettoyer_docker [2020/10/13 19:22] – [Libérer de l'espace disque utilisé par Docker] qduchemi | technique:docker:admin:nettoyer_docker [2022/07/03 21:46] – qduchemi | ||
---|---|---|---|
Ligne 15: | Ligne 15: | ||
- Augmenter la taille des disques de la machine virtuelle. | - Augmenter la taille des disques de la machine virtuelle. | ||
- | ===== Mener une enquête ===== | + | ## Nettoyage des données non-utilisées |
- | On peut commencer | + | < |
+ | |||
+ | Au fil des mises à jour, il y a du stockage pris par Docker | ||
+ | |||
+ | < | ||
+ | |||
+ | * 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* | ||
+ | * 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 | ||
+ | * Les réseaux Docker utilisés par aucun conteneur. | ||
+ | * Le cache des images. | ||
+ | |||
+ | On peut obtenir une estimation | ||
+ | |||
+ | ```bash | ||
+ | docker system df | ||
``` | ``` | ||
- | du -sh / | + | |
+ | Afin de supprimer l' | ||
+ | |||
+ | < | ||
``` | ``` | ||
- | On voit ainsi quels sont les éléments qui occupent le plus de place en mémoire, par exemple : | + | docker |
- | * `volumes` pour le contenu persistant des containeurs (bases de données par exemple) | + | |
- | * `overlay2` pour les containeurs | + | |
- | On peut regarder par exemple quels sont les dix plus gros fichiers les plus gros dans `/var/lib/docker/overlay2` : | + | |
``` | ``` | ||
- | du -sh /var/lib/docker/overlay2/* | sort -rh | head -10 | + | On peut utiliser le [[technique: |
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | ```bash | ||
+ | docker | ||
``` | ``` | ||
- | Mais cette commande | + | |
+ | Inspectez le résultat de la commande | ||
+ | |||
+ | ```bash | ||
+ | docker volume prune -a | ||
``` | ``` | ||
- | for overlayID in $(du -sh /var/lib/docker/overlay2/* | sort -rh | head -10 | grep -P -o " | + | |
+ | Il faut aussi rajouter une commande pour supprimer toutes les images non-associées à un conteneur : | ||
+ | |||
+ | ```bash | ||
+ | docker | ||
``` | ``` | ||
- | 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, | + | ## Recherche d' |
- | On peut utiliser des commandes similaires pour les volumes. | + | ### Première tentative |
- | On peut également | + | Si le stockage récupéré n'est pas suffisant, on peut regarder si un conteneur n' |
- | ===== Supprimer ce qui ne sert à rien ===== | + | La commande suivante permet de lister le stockage utilisé par chaque conteneur, image et volume : |
- | Une fois cette petite enquête menée on va pouvoir commencer par éteindre ce qui ne sert à rien (attention à ne pas éteindre n' | + | ```bash |
- | + | docker | |
- | On peut maintenant lancer une commande qui supprime tout ce qui n'est pas utilisé par docker | + | |
``` | ``` | ||
- | docker system | + | |
+ | 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, | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | On cherche donc à savoir ce qui prend le plus de place : | ||
+ | |||
+ | ```bash | ||
+ | du -sh / | ||
``` | ``` | ||
- | **/!\Faire attention en production/ | ||
- | ===== Augmenter la taille du Logical Volume monté sur /var ===== | + | On voit ainsi quels sont les éléments qui occupent le plus de place en mémoire, par exemple : |
- | Il s'agit soit d' | + | * `volumes` |
+ | * `overlay2` pour les conteneurs | ||
+ | |||
+ | 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 `/ | ||
``` | ``` | ||
- | lvextend | + | du -sh /var/lib/docker/ |
``` | ``` | ||
- | soit de spécifier la taille en absolu | + | |
+ | Mais cette commande ne nous donne pas d' | ||
+ | |||
``` | ``` | ||
- | lvextend | + | for overlayID in $(du -sh /var/lib/docker/ |
``` | ``` | ||
- | ===== Augmenter la taille | + | On peut utiliser des commandes similaires pour les volumes. |
+ | |||
+ | < | ||
+ | |||
+ | ## Augmenter l' | ||
- | 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' | + |