42 votes

Environnement de docker propre: devicemapper

J'ai un menu fixe de l'environnement 2 conteneurs (Jenkins et Nexus, à la fois avec leur propre nommée volume). J'ai un quotidien cron job qui supprime inutilisés des conteneurs et des images. Cela fonctionne bien. Mais le problème est à l'intérieur de mon devicemapper:

du -sh /var/lib/docker/
30G docker/

Je peux chaque dossier dans mon panneau de dossier: Volumes (grand, mais c'est normal dans mon cas):

/var/lib/docker# du -sh volumes/
14G volumes/

Conteneurs:

/var/lib/docker# du -sh containers/
3.2M    containers/

Images:

/var/lib/docker# du -sh image/
5.8M    image/

Devicemapper:

/var/lib/docker# du -sh devicemapper/
  16G   devicemapper/

/var/lib/docker/devicemapper/mnt est de 7,3 G /var/lib/docker/devicemapper/devicemapper est de 8,1 G

Le panneau info:

Storage Driver: devicemapper
 Pool Name: docker-202:1-xxx-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: ext4
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 5.377 GB
 Data Space Total: 107.4 GB
 Data Space Available: 28.8 GB
 Metadata Space Used: 6.148 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.141 GB
 Udev Sync Supported: true

Qu'est-ce que cet espace et suis-je capable de nettoyer sans casser des choses?

54voto

Matt Points 25814

N'utilisez pas de devicemapper boucle de fichier pour quelque chose de sérieux! Docker a de grandes mises en garde à ce sujet.

L' /var/lib/docker/devicemapper/devicemapper répertoire contient les rares boucle des fichiers qui contiennent toutes les données que le panneau de supports. Donc, vous devez utiliser lvm outils de chalut autour d'eux et de faire les choses. À lire bien que la suppression de problèmes avec devicemapper, ils sont un peu sorta résolu, mais peut-être pas.

Je voudrais déplacer loin de devicemapper lorsque cela est possible ou utiliser LVM mince piscines sur quoi que ce soit RHEL base. Si vous ne pouvez pas changer les pilotes de stockage, la même procédure sera au moins toute alloué éparses de l'espace, vous ne pouvez pas récupérer.

Changer le docker pilote de stockage

Changement de pilote de stockage exigera dumping votre /var/lib/docker répertoires qui contient tous vos support de données. Il existe des moyens pour enregistrer des parties de celui-ci, mais qui implique de déconner avec le Panneau intérieur. Mieux à s'engager et à l'exportation tous les récipients ou les volumes que vous souhaitez conserver et de les importer après le changement. Sinon vous allez avoir un nouveau, vide Docker installer!

  1. Exporter des données

  2. Arrêter De Docker

  3. Retirez /var/lib/docker

  4. Modifier votre panneau de démarrage pour utiliser le nouveau pilote de stockage. Ensemble --storage-driver=<name> en /lib/systemd/system/docker.service ou /etc/systemd/system/docker.service ou /etc/default/docker ou /etc/sysconfig/docker

  5. Start Menu Fixe

  6. Importer Des Données

AUFS

AUFS n'est pas dans le noyau principal (et ne le sera jamais), ce qui signifie distro ont activement l'inclure en quelque sorte. Pour Ubuntu, c'est dans l' linux-image-extra des paquets.

apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

Modifiez ensuite le pilote de stockage de l'option d' --storage-driver=aufs

OverlayFS

OverlayFS est déjà disponible dans Ubuntu, il suffit de changer le pilote de stockage d' --storage-driver=overlay2 ou --storage-driver=overlay si vous êtes toujours à l'aide d'un 3.x du noyau

Je ne suis pas sûr de savoir comment bien une idée de ce qui est juste maintenant. Il ne peut pas être bien pire que la boucle de fichier, mais L' overlay2 pilote est assez solide pour dev utiliser, mais n'est pas considérée comme une production encore prête (par exemple le Panneau d'Entreprise ne fournissons pas de support), mais il est poussé à devenir le pilote standard en raison de la AUFS/Kernel questions.

Direct LVM Mince Piscine

Au lieu de la devicemapper boucle de fichier, vous pouvez utiliser un LVM mince piscine directement. RHEL rend facile avec un docker-storage-setup utilitaire distribués avec leurs EPEL docker paquet. Docker avons détaillé les étapes pour mettre en place les volumes manuellement.

--storage-driver=devicemapper \
--storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool \
--storage-opt dm.use_deferred_removal=true

Docker 17.06+ prend en charge la gestion simple direct-lvm bloc de l'appareil les réglages pour vous.

Il suffit de ne pas manquer d'espace dans le volume LVM, jamais. Vous vous retrouvez avec un ne répond pas Docker démon qui doit être tué, puis LVM ressources qui sont encore en usage qui sont difficiles à nettoyer.

3voto

VonC Points 414372

Tout d'abord, qu'est-ce que devicemapper (documents officiels)

Mappeur de périphériques a été inclus dans le réseau principal au noyau Linux depuis la version 2.6.9. Il est une partie essentielle de RHEL famille de distributions Linux.

Le devicemapper pilote de magasins de toute image et de conteneur sur son propre périphérique virtuel. Ces appareils sont de fins d'allocation de copie sur écriture instantané appareils.
Mappeur de périphériques technologie fonctionne au niveau du bloc, plutôt que de niveau des fichiers. Cela signifie que devicemapper pilote de stockage de thin provisioning et de copie sur écriture des opérations de travail avec les blocs plutôt que de l'ensemble des fichiers.

Le devicemapper est la valeur par défaut Docker pilote de stockage sur certaines distributions de Linux.

Docker hôtes exécutant les devicemapper pilote de stockage par défaut pour un mode de configuration connu comme boucle-lvm. Ce mode utilise des fichiers pour créer le pool léger utilisé par l'image et le conteneur des instantanés

Docker 1.10 et, plus tard, ne correspond plus à l'image de la couche Id avec des noms de répertoire dans /var/lib/menu fixe.
Cependant, il y a deux répertoires de clés.

  • L' /var/lib/docker/devicemapper/mnt répertoire contient les points de montage pour l'image et le conteneur des couches.
  • Le répertoire /var/lib/docker/devicemapper/metadatadirectory contient un fichier pour chaque calque de l'image et du conteneur de l'instantané.

Si votre docker info t montrer votre Storage Driver est devicemapper (et pas aufs), de procéder avec prudence avec ces dossiers.
Voir par exemple la question 18867.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X