不要将 devicemapper 循环文件用于任何严重的事情 http://www.projectatomic.io/blog/2015/06/notes-on-fedora-centos-and-docker-storage-drivers/! Docker对此有很大的警告。
The /var/lib/docker/devicemapper/devicemapper
目录包含稀疏循环文件,其中包含 docker 挂载的所有数据。因此,您需要使用 lvm 工具来搜索它们并执行操作。不过请读一读消除 devicemapper 的问题 https://github.com/docker/docker/issues/3182,他们有点解决了,但也许没有。
我会远离devicemapper
如果可能,或者在任何基于 RHEL 的设备上使用 LVM 精简池。如果您无法更改存储驱动程序,则相同的过程至少会清除您无法回收的所有分配的稀疏空间。
更改 docker 存储驱动程序
更改存储驱动程序将需要转储您的/var/lib/docker
包含所有 docker 数据的目录。有一些方法可以保存其中的一部分,但这涉及到 Docker 内部结构的混乱。最好提交并导出您想要保留的任何容器或卷,并在更改后导入它们。否则你将得到一个全新的、空白的 Docker 安装!
导出数据
停止 Docker
Remove /var/lib/docker
修改您的 docker 启动以使用新的存储驱动程序。
放--storage-driver=<name>
in /lib/systemd/system/docker.service
or /etc/systemd/system/docker.service
or /etc/default/docker
or /etc/sysconfig/docker
启动 Docker
导入数据
AUFS https://docs.docker.com/engine/userguide/storagedriver/aufs-driver/
AUFS 不在主线内核中(并且永远不会),这意味着发行版必须以某种方式主动包含它。对于 Ubuntu,它位于linux-image-extra
包。
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
然后将存储驱动程序选项更改为--storage-driver=aufs
覆盖文件系统 https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/
OverlayFS已经在Ubuntu中可用,只需将存储驱动程序更改为--storage-driver=overlay2
or --storage-driver=overlay
如果您仍在使用 3.x 内核
我现在不确定这个主意有多好。它不会比循环文件差多少,但是
这overlay2
驱动程序非常适合开发使用,但尚未被视为生产就绪(例如 Docker Enterprise 不提供支持),但由于 AUFS/内核问题,它正在被推动成为标准驱动程序。
直接 LVM 精简池 https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#/configure-direct-lvm-mode-for-production
您可以直接使用 LVM 精简池,而不是 devicemapper 循环文件。 RHEL 通过以下方式让这一切变得简单docker-storage-setup https://github.com/projectatomic/docker-storage-setup/blob/master/docker-storage-setup.sh随 EPEL docker 包一起分发的实用程序。Docker 有手动设置卷的详细步骤 https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production.
--storage-driver=devicemapper \
--storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool \
--storage-opt dm.use_deferred_removal=true
Docker 17.06+ 支持管理简单direct-lvm为您设置块设备。 https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production
只是永远不要耗尽 LVM 卷中的空间。最终,您会遇到需要终止的无响应 Docker 守护进程,以及仍在使用且难以清理的 LVM 资源。