gpt4 book ai didi

docker - 清理docker环境: devicemapper

转载 作者:IT老高 更新时间:2023-10-28 12:35:58 29 4
gpt4 key购买 nike

我有一个带有 2 个容器(Jenkins 和 Nexus,都有自己的命名卷)的 docker 环境。我每天都有一个删除未使用的容器和图像的 cron 作业。这工作正常。但问题出在我的设备映射器内部:

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

我可以在我的 docker 文件夹中的每个文件夹:卷(大,但在我的情况下这是正常的):

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

容器:

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

图片:

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

设备映射器:

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

/var/lib/docker/devicemapper/mnt 为 7.3G/var/lib/docker/devicemapper/devicemapper是8.1G

docker 信息:

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

这个空间是什么,我可以在不破坏东西的情况下清理它吗?

最佳答案

Don't use a devicemapper loop file for anything serious ! Docker 对此有很大的警告。

/var/lib/docker/devicemapper/devicemapper目录包含稀疏循环文件,其中包含 docker 挂载的所有数据。所以你需要使用 lvm 工具来搜索它们并做一些事情。阅读 the remove issues with devicemapper ,他们有点解决了,但也许没有。

我会离开 devicemapper在可能的情况下或在任何基于 RHEL 的设备上使用 LVM 精简池。如果您无法更改存储驱动程序,则相同的过程至少会清除您无法回收的所有已分配稀疏空间。

更改 docker 存储驱动程序

更改存储驱动程序需要转储您的 /var/lib/docker包含所有 docker 数据的目录。有一些方法可以保存其中的一部分,但这涉及到弄乱 Docker 内部。最好提交和导出您想要保留的任何容器或卷,并在更改后导入它们。否则你将有一个全新的、空白的 Docker 安装!

  1. 导出数据

  2. 停止 Docker

  3. 移除 /var/lib/docker

  4. 修改 docker 启动以使用新的存储驱动程序。设置--storage-driver=<name>/lib/systemd/system/docker.service/etc/systemd/system/docker.service/etc/default/docker/etc/sysconfig/docker

  5. 启动 Docker

  6. 导入数据

AUFS

AUFS 不在主线内核中(而且永远不会),这意味着发行版必须以某种方式主动包含它。对于 Ubuntu,它位于 linux-image-extra包。

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

然后将存储驱动程序选项更改为 --storage-driver=aufs

OverlayFS

OverlayFS 已经在 Ubuntu 中可用,只需将存储驱动程序更改为 --storage-driver=overlay2--storage-driver=overlay如果您仍在使用 3.x 内核

我不确定现在这个主意有多好。它不能比循环文件差多少,但是 overlay2驱动程序非常适合开发人员使用,但尚未考虑生产就绪(例如 Docker Enterprise 不提供支持),但由于 AUFS/内核问题,它正被推为标准驱动程序。

Direct LVM Thin Pool

您可以直接使用 LVM 精简池来代替 devicemapper 循环文件。 RHEL 使用 docker-storage-setup 让这一切变得简单随 EPEL docker 包一起分发的实用程序。 Docker have detailed steps for setting up the volumes manually .

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

Docker 17.06+ 支持 managing simple direct-lvm block device setups for you.

永远不要用完 LVM 卷中的空间。您最终会得到一个无响应的 Docker 守护程序,需要被杀死,然后是仍在使用且难以清理的 LVM 资源。

关于docker - 清理docker环境: devicemapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37672018/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com