docker查找占用主机磁盘最多的容器


背景

有时候我们一台主机上部署了多个容器,而且对部分数据做了持久化,时间长了,数据会越来越多,相应的可能会造成磁盘空间不足?那么我们如何,找出占用磁盘空间最大的容器,并删除容器的部分不需要的日志或数据文件呢?

overlay2简介

OverlayFS是一种现代的联合文件系统,与AUFS类似,但速度更快且实现更简单。Docker为OverlayFS提供了两个存储驱动程序:原始的overlay,更新的和更稳定的overlay2。

容器存储目录

[root@docker overlay2]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G  4.1G   34G  11% /
devtmpfs        911M     0  911M   0% /dev
tmpfs           920M     0  920M   0% /dev/shm
tmpfs           920M  1.3M  919M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
overlay          40G  4.1G   34G  11% /var/lib/docker/overlay2/6c21d550b2e37e23b777490d3f3b26c54ed5b98ad615ac833ff4248a288b9530/merged
overlay          40G  4.1G   34G  11% /var/lib/docker/overlay2/aa7a46d5a35c404e956fa35c88c5ecb8f117d03299f3818d5c66c33caf4ee6f4/merged
overlay          40G  4.1G   34G  11% /var/lib/docker/overlay2/507f4480d6ed67738d618080b0fcbf60ca22623ba9a87eade44fa403e421cf55/merged
overlay          40G  4.1G   34G  11% /var/lib/docker/overlay2/5cc8105791fd74756b0f7cc36ec93685f3ca90bcb72ac025edb7389e5156228b/merged
overlay          40G  4.1G   34G  11% 

在当前版本中,容器存储目录为/var/lib/docker/overlay2。且当前占用宿主机磁盘空间的目录也为容器存储目录。

查找占用磁盘空间大小的容器目录

[root@docker overlay2]# du -s * | sort -nr | head -5
334636    f6acb9573429712fe4d8b8b786e24d790fae8727f403693874b62a168b174870
159348    86444fb8a5127b41323bef731c14eb764135a7066bb5f904427f53816ff4fe2f
146556    6c21d550b2e37e23b777490d3f3b26c54ed5b98ad615ac833ff4248a288b9530
102080    1eb50142766d18f3927615f63f599d9de1885b2954397736b882bb89ab8ae265
88504    ef4e0ff8bf2cd2f8d2f147e30e89e2c7b6f6e02795ebbcd45a3bba1d77b3b132

注意:这里只列出了排名前五的容器目录。那么现在知道了容器目录,那么如何找出对应的容器呢?现在我们要找出f6acb9573429开头的目录对应时哪个容器?

查找容器目录对应的容器名

  • 通过 docker ps -a 查看容器列表
  • 通过 docker inspect 容器ID 查看容器配置信息
[root@docker overlay2]# for i in $(docker ps -q );do echo echo $i ; docker inspect $i|grep f6acb9573429  ; done
echo 4332fe39163b
                "LowerDir": "/var/lib/docker/overlay2/**f6acb9573429**712fe4d8b8b786e24d790fae8727f403693874b62a168b174870-init/diff:/var/lib/docker/overlay2/b76d30a66c8fef0123a2310bd861a0aa626b5a6e7bf83f9982a6344c8e466187/diff:/var/lib/docker/overlay2/c5b396df751ea053d81765d77f85a8dd44c1c847b6fbe95b38230509f372dfd2/diff:/var/lib/docker/overlay2/1efa8716d1f55fde7716deaacabe0e582aff78f7e460f18b9d5dc84db387533e/diff:/var/lib/docker/overlay2/3f78cbaa248e4f8b1e25599e5e1e2496a463b75e39adfaad2026f134a8ebf89f/diff:/var/lib/docker/overlay2/18ca1077ac90dff82d1085d19162d7b56c42effce18b416632c0e1627602fb17/diff:/var/lib/docker/overlay2/bcee6e758f7ac5769da672274262d61b38acc2cc6ade4b9b56cd0475ca886528/diff:/var/lib/docker/overlay2/e23e02b967bdf1aaaef8e002f0a9f1d778d7a7de7adb12cd925e84ef770b62c7/diff:/var/lib/docker/overlay2/916a116fc26d356a61a9e028c52a3a402349e87e1e9eea6f4d2039cf31391155/diff",
                "MergedDir": "/var/lib/docker/overlay2/f6acb9573429712fe4d8b8b786e24d790fae8727f403693874b62a168b174870/merged",
                "UpperDir": "/var/lib/docker/overlay2/f6acb9573429712fe4d8b8b786e24d790fae8727f403693874b62a168b174870/diff",
                "WorkDir": "/var/lib/docker/overlay2/f6acb9573429712fe4d8b8b786e24d790fae8727f403693874b62a168b174870/work"
echo 4172f0cf7985
echo a622665b0a81
echo 20fde2e0a903

注意:这里就已经找出了最占用磁盘空间大小的容器了。4332fe39163b为容器ID.

查看镜像占用磁盘

docker system df 

查看docker日志.json.log

docker日志默认不作限制,可能产生非常大的日志文件,需要清理或者作出限制.

  • 限制docker容器日志大小
    // vim /etc/docker/daemon.json
    {
    "log-driver":"json-file",
    "log-opts": {"max-size":"500m", "max-file":"3"}
    }

参考链接


文章作者: wuzhiyong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuzhiyong !
评论
 上一篇
docker限制容器日志大小 docker限制容器日志大小
问题容器日志一般存放在/var/lib/docker/containers/container_id/下面,以json.log结尾的文件(业务日志)很大. 处理 临时清空日志 # 注意不能用rm命令 cat /dev/null > /var
2020-11-20
下一篇 
kubeadm部署k8s【更新证书】 kubeadm部署k8s【更新证书】
问题通过 kubeadm部署k8s,默认生成的证书有效期是一年.需要每年更新证书. 查看证书有效期kubeadm alpha certs check-expiration 更新证书kubeadm alpha certs renew all
2020-11-20
  目录