docker system df 磁盘使用情况实际与显示之间的差异

Dan*_*iel 5 du docker

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

\n\n
Images space usage:\n\nREPOSITORY                               TAG                 IMAGE ID            CREATED ago             SIZE                SHARED SIZE         UNIQUE SiZE         CONTAINERS\nregistry.gitlab.com/precisesale/app      latest              b7833546c2cf        About an hour ago ago   252.1MB             123.8MB             128.4MB             1\nhealthdiary/app                          latest              565c6d3906e6        2 days ago ago          312.2MB             123.8MB             188.4MB             1\nmongo                                    latest              f93ff881751f        5 days ago ago          367.6MB             0B                  367.6MB             2\nnginx                                    latest              b175e7467d66        6 weeks ago ago         108.9MB             0B                  108.9MB             1\njwilder/docker-gen                       latest              8959ee34c769        2 months ago ago        19.91MB             4.148MB             15.77MB             1\njrcs/letsencrypt-nginx-proxy-companion   latest              17939ceb7a52        2 months ago ago        86.86MB             4.148MB             82.71MB             1\n\nContainers space usage:\n\nCONTAINER ID        IMAGE                                    COMMAND                  LOCAL VOLUMES       SIZE                CREATED ago         STATUS              NAMES\nc20dc3438552        healthdiary/app                          "./entrypoint.sh nod\xe2\x80\xa6"   0                   0B                  8 minutes ago ago   Up 8 minutes        healthdiary_app_1\nbf8c4307dcbb        mongo:latest                             "docker-entrypoint.s\xe2\x80\xa6"   1                   0B                  8 minutes ago ago   Up 8 minutes        healthdiary_mongo_1\n47fced8d18fe        registry.gitlab.com/precisesale/app      "./entrypoint.sh nod\xe2\x80\xa6"   0                   0B                  9 minutes ago ago   Up 9 minutes        precisesale_app_1\n597d97d5c1fa        mongo:latest                             "docker-entrypoint.s\xe2\x80\xa6"   1                   0B                  9 minutes ago ago   Up 9 minutes        precisesale_db_1\nb5bb14faa910        jwilder/docker-gen                       "/usr/local/bin/dock\xe2\x80\xa6"   0                   0B                  7 hours ago ago     Up 19 minutes       nginx-gen\n8eee2bee084a        nginx                                    "nginx -g \'daemon of\xe2\x80\xa6"   0                   2B                  7 hours ago ago     Up 19 minutes       nginx-web\n6b8b0cd5d938        jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr\xe2\x80\xa6"   0                   1.66kB              7 hours ago ago     Up 19 minutes       nginx-letsencrypt\n\nLocal Volumes space usage:\n\nVOLUME NAME                                                        LINKS               SIZE\n0a40fac6ca98e776dad972c8193362a51a485b3305979e58996545d97310a3c7   1                   0B\n929b0b88849ad4d390efd4666e6a0e5f82e0e6dd34f7a09f609de90b190e6148   1                   0B\n\nBuild cache usage: 0B\n
Run Code Online (Sandbox Code Playgroud)\n\n

即使我不考虑前两个容器共享空间的节省,摘要大小也是1147.5 MB

\n\n

但是如果我测量光盘上 docker overlay2 的大小du我得到

\n\n
du -hs /var/lib/docker/overlay2/\n2.7G    /var/lib/docker/overlay2/\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker system df和测量的集装箱尺寸差异的原因在哪里du

\n

小智 7

我前段时间也想知道同样的事情。\n它\xe2\x80\x99s不是一个错误,它\xe2\x80\x99s是一个功能:-)

\n\n
du -sh /var/lib/docker/overlay2\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
du -shc /var/lib/docker/overlay2/*/diff\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以在您的环境中进行测试,如下所示:\n运行

\n\n
df -h /dev/sd*\ndu -shc /var/lib/docker/overlay2/*/diff\ndu -sh /var/lib/docker/overlay2\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
for i in {1..20}; do docker run -itd centos bash; done\ndf -h /dev/sd*\ndu -shc /var/lib/docker/overlay2/*/diff\ndu -sh /var/lib/docker/overlay2\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以看到实际的磁盘分配(df 命令)仅比以前多了 cca 200MB,但整个文件夹上的 \xe2\x80\x9cdu\xe2\x80\x9d 输出 4.2G 分配。\n\xe2\x80\x9cdu\ \xe2\x80\x9cdiff\xe2\x80\x9d 文件夹上的 xe2\x80\x9d 显示 212M 是正确的。

\n\n

这就是 Docker 的工作原理以及它的伟大之处!

\n