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

Posted

技术标签:

【中文标题】如何验证 docker 容器的基本设备大小【英文标题】:How to verify base device size of docker container 【发布时间】:2020-11-15 03:36:37 【问题描述】:

我知道 Docker 使用存储池为每个容器分配存储。使用 devicemapper 存储时,存储池的大小默认为 100GB,每个容器的默认限制为 10G。这些数据显示在docker infoBase Device SizeData 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 容器的基本设备大小的主要内容,如果未能解决你的问题,请参考以下文章

Docker第八回(docker资源限制和验证)

Docker容器的基本概念和部署

Docke及Docker Compose于微服务的实践

1 分钟记住 docker 镜像和容器常用基本命令

使用 Apache 2.4 mod_proxy 和基本身份验证在 Docker 容器中运行 Portainer

Docker网络与Iptables浅析