用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响。 本文先对 Docker 的空间分析与清理进行说明,然后对容器的磁盘容量限制与使用建议做简要说明。
典型问题场景
用户发现 Docker 宿主机的磁盘空间使用率非常高。通过 du 逐层分析,发现是 Volume 或 overlay2 等目录占用了过高空间。示例如下:
# 根据使用的存储驱动的不同,相应目录会有所不同:
[root@node3 docker]# du -h --max-depth=1 |sort
104K ./network
13M ./image
20K ./plugins
24G ./overlay2 # 这个目录占用了非常高的磁盘磁盘空间
25G .
283M ./volumes
4.0K ./swarm
4.0K ./tmp
4.0K ./trust
518M ./containers
空间使用分析
遇到此类问题,可以参阅如下步骤进行空间分析,定位占用过高空间的业务来源。
分析 Docker 空间分布
Docker 的内置 CLI 指令 docker system df
,可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。 示例输出如下:
[root@node3 docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 17 12 2.713 GB 1.144 GB (42%)
Containers 15 12 10.75 GB 0 B (0%)
Local Volumes 8 4 282.9 MB 241.8 MB (85%)
查看空间占用细节
可以进一步通过 -v
参数查看空间占用细节,以确定具体是哪个镜像、容器或本地卷占用了过高空间。示例输出如下:
[root@node3 docker]# docker system df -v
# 镜像的空间使用情况
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
busybox latest 6ad733544a63 5 days ago 1.129 MB 0 B 1.129 MB 1
nginx latest b8efb18f159b 3 months ago 107.5 MB 107.5 MB 0 B 4
ubuntu latest 14f60031763d 3 months ago 119.5 MB 0 B 119.5 MB 0
alpine 3.3 606fed0878ec 4 months ago 4.809 MB 0 B 4.809 MB 0
tutum/curl latest 01176385d84a 3 years ago