当前位置: 首页 > 面试题库 >

清洁Docker环境:devicemapper

满子实
2023-03-14
问题内容

我有一个带有2个容器(Jenkins和Nexus,都有各自的命名卷)的docker环境。我每天都有一个cron作业,该作业会删除未使用的容器和图像。一切正常。但是问题出在我的devicemapper内部:

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/

Devicemapper:

/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

这个空间是什么,我能在不弄破东西的情况下清洁它吗?


问题答案:

不要对任何严重的问题使用devicemapper循环文件!Docker对此有重大警告。

/var/lib/docker/devicemapper/devicemapper目录包含稀疏循环文件,该文件包含docker挂载的所有数据。因此,您将需要使用lvm工具在它们周围拖网并执行操作。请仔细阅读devicemapper的删除问题,这些问题已得到解决,但可能无法解决。

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

更改Docker存储驱动程序

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

  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不在主线内核中(而且永远不会存在),这意味着发行版必须以某种方式积极地将其包括在内。对于Ubuntu,它在linux-image- extra软件包中。

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

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

[叠加FS](https://docs.docker.com/engine/userguide/storagedriver/overlayfs-

driver/)

OverlayFS在Ubuntu中已经可用,只需将存储驱动程序更改为,--storage-driver=overlay2或者--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随其EPEL
docker软件包一起分发的实用程序使此操作变得容易。Docker提供了手动设置卷的详细步骤。

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

Docker
17.06+支持为您管理简单的direct- lvm块设备设置。

只是永远不要用完LVM卷中的空间。最后,您将导致一个无响应的Docker守护进程,该守护进程需要被杀死,然后仍难以清除的仍在使用的LVM资源。



 类似资料:
  • 通过docker system prune-a清理 但只清除了9GB

  • 我在AWS EC2上运行了一些docker容器,/var/lib/docker/overlay2文件夹的磁盘大小增长非常快。 我想知道删除它的内容是否安全?或者如果docker有某种命令来释放一些磁盘使用量。 更新: 实际上,我已经尝试了docker系统prune-a,它回收了0Kb。 此外,my/docker/overlay2磁盘大小比docker system df的输出大得多 在阅读了doc

  • 我想知道是否有人能帮上忙。清理和构建最简单的项目时出错。(见下文) 导致错误的步骤: 作为一名新员工,也就是一台不超过4个月的机器上的新用户,我从打开NetBeans 8.2开始——一周前为我安装了NetBeans和Android Studio(用于sdk)。 但是没有安装Android插件,所以我实现了nbandroid更新中心来安装插件。然后我连接了sdk——在users\user中找到。us

  • 拉取镜像 安装docker 进入swoole-src/travis/目录,执行TRAVIS_BRANCH=alpine ./route.sh 进入 Docker docker exec -it -e LINES=$(tput lines) -e COLUMNS=$(tput cols) swoole bash

  • 这里是用来控制 Gitea 行为表现的的环境变量清单,您需要在执行如下 Gitea 启动命令前设置它们来确保配置生效: GITEA_CUSTOM=/home/gitea/custom ./gitea web Go 的配置 因为 Gitea 使用 Go 语言编写,因此它使用了一些相关的 Go 的配置参数: GOOS GOARCH GOPATH 您可以在官方文档中查阅这些配置参数的详细信息。 Git

  • 问题内容: 我想把头围在Docker上,但是很难弄清楚。我试图在我的小项目(MERN堆栈)中实现它,并且我在思考如何区分开发(可能是登台)和生产环境。 我看到了一个示例,其中他们使用了2个Docker文件和2个docker-compose文件(每个对都包含一个env,因此Dockerfile + docker-compose.yml用于prod,Dockerfile-dev + docker-co