如何验证 docker 容器的基本设备大小

How to verify base device size of docker container

我知道Docker使用存储池为每个容器分配存储空间。默认情况下使用 devicemapper 存储时,存储池的大小为 100GB,每个容器的默认限制为 10G。此数据显示在 docker info 中的 Base Device SizeData Space Total 字段中。

但是,在我的场景中docker info不显示这些数据字段,可能是因为我的存储驱动程序是overlay2 如何提取这些信息,有没有其他方法(s)?

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

您提到的“存储池”和其他指标特定于 devicemapper 存储驱动程序。覆盖存储驱动使用普通文件和一些内核魔法; Docker 没有任何特定的 space 分配,它可以使用安装在 /var/lib/docker.

上的分区上的所有 space

I know that Docker uses a storage pool to allocate storage to each container.

没有。 Devicemapper 使用存储池。大多数其他联合文件系统直接在父文件系统中的文件级别工作。因此,没有显示预分配块和限制的“基本设备大小”或类似指标。

您可以更深入地研究覆盖文件系统,以了解它们如何将目录从父文件系统合并到您在容器内使用的新文件系统中。我在此处的介绍性演示文稿中有一个通过覆盖文件系统工作的示例:

https://sudo-bmitch.github.io/presentations/docker-intro/presentation.html#52

用于 运行 覆盖演示的实际命令在 this markdown file 中列出。

因此,使用类似 overlay2 文件系统的容器的所有限制都是从父文件系统继承的。由于 docker 执行 /var/lib/docker 下的所有操作,该文件系统上的可用磁盘 space 与容器内部的限制相同。在我自己的实验室中,它被符号链接到 /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% /