docker 系统 df 磁盘使用情况真实和显示的区别
Diffrence between real and showed by docker system df disc usage
我在版本 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
即使我不考虑来自两个第一个容器的共享 space 的节省,摘要大小也是 1147.5 MB
但是如果我通过 du
测量光盘上 docker overlay2 的大小,我得到
du -hs /var/lib/docker/overlay2/
2.7G /var/lib/docker/overlay2/
docker system df
和du
测量的容器尺寸不同的原因在哪里?
前段时间我也在想同样的事情。
这不是错误,这是一个功能:-)
du -sh /var/lib/docker/overlay2
未显示 objective 值,因为已使用覆盖驱动程序安装合并文件夹,并且 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命令)只比之前多了cca 200MB,但是整个文件夹的“du”输出了4.2G的分配。
“diff”文件夹上的“du”显示 212M 是正确的。
这就是 Docker 的工作原理以及它的伟大之处!
我在版本 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
即使我不考虑来自两个第一个容器的共享 space 的节省,摘要大小也是 1147.5 MB
但是如果我通过 du
测量光盘上 docker overlay2 的大小,我得到
du -hs /var/lib/docker/overlay2/
2.7G /var/lib/docker/overlay2/
docker system df
和du
测量的容器尺寸不同的原因在哪里?
前段时间我也在想同样的事情。 这不是错误,这是一个功能:-)
du -sh /var/lib/docker/overlay2
未显示 objective 值,因为已使用覆盖驱动程序安装合并文件夹,并且 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命令)只比之前多了cca 200MB,但是整个文件夹的“du”输出了4.2G的分配。 “diff”文件夹上的“du”显示 212M 是正确的。
这就是 Docker 的工作原理以及它的伟大之处!