如何验证 docker 容器的基本设备大小
Posted
技术标签:
【中文标题】如何验证 docker 容器的基本设备大小【英文标题】:How to verify base device size of docker container 【发布时间】:2020-11-15 03:36:37 【问题描述】:我知道 Docker 使用存储池为每个容器分配存储。使用 devicemapper 存储时,存储池的大小默认为 100GB,每个容器的默认限制为 10G。这些数据显示在docker info
的Base Device Size
和Data Space Total
字段中。
但是,在我的场景docker info
中不显示这些数据字段,可能是因为我的存储驱动程序是overlay2
我如何提取这些信息,还有其他方法吗?
docker info
的输出
Containers: 9
Running: 4
Paused: 0
Stopped: 5
Images: 28
Server version: 28
Storage driver: overlay2
Backing filesystem: extfs
Supports d_type: true
Native Overlay diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
...
docker version
的输出
Docker version 18.09.3, build 774a1fa
【问题讨论】:
【参考方案1】:您提到的“存储池”和其他指标特定于 devicemapper 存储驱动程序。覆盖存储驱动使用普通文件和一些内核魔法; Docker 没有任何特定的空间分配,它可以使用挂载在/var/lib/docker
上的分区上的所有空间。
【讨论】:
【参考方案2】:我知道 Docker 使用存储池为每个容器分配存储。
不。 Devicemapper 使用存储池。大多数其他联合文件系统直接在父文件系统中的文件级别工作。因此,没有显示预分配块和限制的“基本设备大小”或类似指标。
您可以深入研究覆盖文件系统,以了解它们如何将父文件系统中的目录合并到您在容器内使用的新文件系统中。在我的介绍演示中,我有一个使用覆盖文件系统的示例:
https://sudo-bmitch.github.io/presentations/docker-intro/presentation.html#52
this markdown file 中列出了用于运行该叠加演示的实际命令。
因此,您对使用诸如 overlay2 文件系统之类的容器的所有限制都是从父文件系统继承的。由于 docker 在 /var/lib/docker 下执行所有操作,因此您在该文件系统上的可用磁盘空间与您在容器内看到的限制相同。在我自己的实验室中,它被符号链接到 /home 下的目录,因此您将在主机和容器内看到以下内容:
$ ls -l /var/lib/docker
lrwxrwxrwx 1 root root 12 Nov 11 2019 /var/lib/docker -> /home/docker
$ df -h /var/lib/docker/.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/bmitch--t490--vg-home 857G 355G 459G 44% /home
$ docker run -it --rm busybox df -h /
Filesystem Size Used Available Use% Mounted on
overlay 856.5G 354.6G 458.3G 44% /
【讨论】:
以上是关于如何验证 docker 容器的基本设备大小的主要内容,如果未能解决你的问题,请参考以下文章