真实和由docker系统显示df光盘使用之间的差异

时间:2018-05-29 17:37:00

标签: docker du

我在版本18.03.1-ce中有docker支持命令docker system df。他的输出:

Images space usage:

REPOSITORY                               TAG                 IMAGE ID            CREATED ago             SIZE                SHARED SIZE         UNIQUE SiZE         CONTAINERS
registry.gitlab.com/precisesale/app      latest              b7833546c2cf        About an hour ago ago   252.1MB             123.8MB             128.4MB             1
healthdiary/app                          latest              565c6d3906e6        2 days ago ago          312.2MB             123.8MB             188.4MB             1
mongo                                    latest              f93ff881751f        5 days ago ago          367.6MB             0B                  367.6MB             2
nginx                                    latest              b175e7467d66        6 weeks ago ago         108.9MB             0B                  108.9MB             1
jwilder/docker-gen                       latest              8959ee34c769        2 months ago ago        19.91MB             4.148MB             15.77MB             1
jrcs/letsencrypt-nginx-proxy-companion   latest              17939ceb7a52        2 months ago ago        86.86MB             4.148MB             82.71MB             1

Containers space usage:

CONTAINER ID        IMAGE                                    COMMAND                  LOCAL VOLUMES       SIZE                CREATED ago         STATUS              NAMES
c20dc3438552        healthdiary/app                          "./entrypoint.sh nod…"   0                   0B                  8 minutes ago ago   Up 8 minutes        healthdiary_app_1
bf8c4307dcbb        mongo:latest                             "docker-entrypoint.s…"   1                   0B                  8 minutes ago ago   Up 8 minutes        healthdiary_mongo_1
47fced8d18fe        registry.gitlab.com/precisesale/app      "./entrypoint.sh nod…"   0                   0B                  9 minutes ago ago   Up 9 minutes        precisesale_app_1
597d97d5c1fa        mongo:latest                             "docker-entrypoint.s…"   1                   0B                  9 minutes ago ago   Up 9 minutes        precisesale_db_1
b5bb14faa910        jwilder/docker-gen                       "/usr/local/bin/dock…"   0                   0B                  7 hours ago ago     Up 19 minutes       nginx-gen
8eee2bee084a        nginx                                    "nginx -g 'daemon of…"   0                   2B                  7 hours ago ago     Up 19 minutes       nginx-web
6b8b0cd5d938        jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   0                   1.66kB              7 hours ago ago     Up 19 minutes       nginx-letsencrypt

Local Volumes space usage:

VOLUME NAME                                                        LINKS               SIZE
0a40fac6ca98e776dad972c8193362a51a485b3305979e58996545d97310a3c7   1                   0B
929b0b88849ad4d390efd4666e6a0e5f82e0e6dd34f7a09f609de90b190e6148   1                   0B

Build cache usage: 0B

即使我没有考虑来自两个第一个容器的共享空间的节省,摘要大小为1147.5 MB

但如果我通过du测量光盘上的docker overlay2的大小,我会

du -hs /var/lib/docker/overlay2/
2.7G    /var/lib/docker/overlay2/

docker system dfdu衡量的集装箱大小差异的原因在哪里?

1 个答案:

答案 0 :(得分:1)

前段时间我在想同样的事情。 这不是错误,而是功能:-)

du -sh /var/lib/docker/overlay2

未显示目标值,因为已使用覆盖驱动程序安装了合并文件夹,并且du输出不是实际的磁盘分配大小。

您可以通过仅检查diff文件夹来查看实际的磁盘分配大小,例如:

du -shc /var/lib/docker/overlay2/*/diff

您可以在您的环境中进行如下测试: 运行

df -h /dev/sd*
du -shc /var/lib/docker/overlay2/*/diff
du -sh /var/lib/docker/overlay2

现在启动20个centos容器并观察发生了什么变化:

for i in {1..20}; do docker run -itd centos bash; done
df -h /dev/sd*
du -shc /var/lib/docker/overlay2/*/diff
du -sh /var/lib/docker/overlay2

您可以看到实际磁盘分配(df命令)仅比以前多200MB,但整个文件夹上的“ du”输出为4.2G分配。 “ diff”文件夹上的“ du”显示212M是正确的。

这就是Docker的工作原理,并使其变得很棒!