目录

1. 前言

2. 常见问题场景

3. docker 磁盘空间使用分析及处理

4. 总结


1. 前言

使用 Docker 运行业务一段时间后,可能会出现宿主节点的磁盘容量占用高,导致宿主机磁盘空间不足等异常,对业务造成影响。本文对 Docker 的空间占用进行汇总分析,以及对应的清理操作进行说明,希望能帮到大家~

2. 常见问题场景

一般来说,docker包括镜像(image)、容器(container)和数据卷(volumn)三部分,日常遇到的docker空间占用问题,基本也是从这三方面入手。典型的场景有:

  • json.log文件过大
  • 镜像较多占用空间大
  • local volumn占用空间大
    基本上来说,docker 空间占用大,都是围绕上面几方面来开展分析的。下面说说空间分析及处理应对措施

3. docker 磁盘空间使用分析及处理

  • 排查命令: docker system df
    命令可以查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间占用情况,如下效果
docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          17        15        6.016GB   1.001GB (16%)
Containers      29        26        4.444MB   0B (0%)
Local Volumes   7         4         465.5MB   232.7MB (50%)
Build Cache     0         0         0B        0B

3.1 image镜像占用分析及解决

通过 docker system df命令,查看Images镜像占用的空间大小,可以看到总的镜像数以及在用的镜像数。可以通过以下命令进行清理,从而达到释放空间占用的作用

# 通过命令清除无用的镜像,停止的容器和Volumes
docker system prune -a
# 也可以通过命令手动删除指定镜像
docker rmi 镜像ID

3.2 json.log占用分析及解决

容器镜像数较多导致的空间占用是最常见也最容易处理的场景,除通过docker system prune清理外,也可通过docker rmi的命令进行清理。除此之外 ,还有常见的空间占用场景,如json.log文件过大。当容器运行一段时间后,容器的控制台日志输出过大的时候,会导致一个以容器ID-json命名的Log文件,持续增大,一般是在/var/lib/docker/containers/目录下,可以通过如下命令查看json.log占用

ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
-rw-r----- 1 root root    0 Dec 27 14:22 /var/lib/docker/containers/021451de5bbaf2ac68839d4b9f3a4605be673d4286b3963ee2bddb1a3d01b6d2/021451de5bbaf2ac68839d4b9f3a4605be673d4286b3963ee2bddb1a3d01b6d2-json.log
-rw-r----- 1 root root  81K Dec 27 16:27 /var/lib/docker/containers/0413a938fff4603b9d898b680ba16b11b02a7cac25ddfaea318c15f1398668fd/0413a938fff4603b9d898b680ba16b11b02a7cac25ddfaea318c15f1398668fd-json.log
-rw-r----- 1 root root  113 Dec 21 21:44 /var/lib/docker/containers/1e6fb2c4f4bc9afeff1406c2c7f4a48e162c3b8075aef6e67871c942232b2fbe/1e6fb2c4f4bc9afeff1406c2c7f4a48e162c3b8075aef6e67871c942232b2fbe-json.log
-rw-r----- 1 root root  26K Dec 27 14:21 /var/lib/docker/containers/283e6cfc3f9e52ffb5dfd26386d910010a6f14e2304d28c244c9010b3396f2aa/283e6cfc3f9e52ffb5dfd26386d910010a6f14e2304d28c244c9010b3396f2aa-json.log
-rw-r----- 1 root root 7.6K Dec 27 16:27 /var/lib/docker/containers/338ee505e76965f6636c229f437fe30018acd24c94e3aab9eec2fd3dffe67d29/338ee505e76965f6636c229f437fe30018acd24c94e3aab9eec2fd3dffe67d29-json.log

解决方案有3种

简单处理:

echo '' > /var/lib/docker/containers/容器id-json.log

运行服务时指定json log大小及数量

# 参数:--log-opt max-size=200m --log-opt max-file=3
docker run -it --log-opt max-size=200m --log-opt max-file=3 nginx

全局配置

vim  /etc/docker/daemon.json
{"log-driver":"json-file","log-opts":{"max-size" :"200m","max-file":"3"}
}systemctl daemon-reload
systemctl restart docker

3.3 Local Volumnes占用分析及解决

Local Volumnes占用空间大,相对来说比较少遇到的一种场景,像镜像和json.log占用的情况,比较常见。

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          42        20        10.81GB   4.265GB (39%)
Containers      64        39        1.358GB   200.3MB (14%)
Local Volumes   7         4         64.9GB   232.7MB (0.3%)
Build Cache     0         0         0B        0B

从命令可以看出,Local Volumnes占用超过60GB,可释放空间只有232MB,因此通过命令:docker system prune清理也只能释放232MB的空间占用。
解决方案
思路:
查看Local Volumes占用明细->查找关联的容器ID->清理对应容器->完成空间占用清理

# 通过参数-v查看详细的空间占用
docker system df -v
*** ***
Local Volumes space usage:VOLUME NAME                                                        LINKS     SIZE
13cb48964bd5f5b2154687cd2ec9d948c03183c778a131021d7a078251e327fc   1         77.58MB
0c6f791c44f9e18c414df127effeb03bcd4e3d3f00a1da9520b1f79308d5d4b4   0         77.58MB
7995d23375e56221438cca64ddd9f0a799c6492cf28ea4cf8689fa3f6ca6d0b2   2         77.58MB
c742d23648db19b93a731d6861864f7fc90ec22bfd3aeaa73c811fe587126777   1         77.58MB
b60f3956f0d502f163e47806b2bfe6d8e1ad3fe555d1a01c86541708ec5277ff   1         0B
fc52cd72fa393c8cbe92b90de2d5e555d5a7cee725871ff729a1941fadfe942d   1         62.22GB
86cff21c7b3690e94548a94e5e87428761d3887f0a62abbd85ddf1b15684dbd8   0         77.58MB
0ebc98b7d24962a968acb73ae65abd9b1e846098ba4f7d68f09c8d163cedd12e   0         77.58MBBuild cache usage: 0BCACHE ID   CACHE TYPE   SIZE      CREATED   LAST USED   USAGE     SHARED

可以看出磁盘占用主要是:fc52cd72fa393c8cbe92b90de2d5e555d5a7cee725871ff729a1941fadfe942d,因此,要查看此卷相关联的容器ID

# 编写py脚本
import os
volumn = "fc52cd72fa393c8cbe92b90de2d5e555d5a7cee725871ff729a1941fadfe942d"
names = [line.split(" ")[-1] for line in os.popen("docker ps -a").read().split("\n") if line ]
print([name for name in names[1:] if volumn in os.popen("docker inspect %s"%name).read()])# 执行脚本
python volumn.py
# 返回结果如下
['collection-687df56967-z5t6f']
找到相关联的容器后,判断容器运行着什么,内容是否可清理

4. 总结

在日常使用中,安装docker后做好优化配置工作,如配置json log大小及文件限制,定期清理无用的容器和镜像,可以减少docker 空间占用导致宿主机磁盘空间不够导致的各种问题。当遇到以上措施无法处理的情况的时候,要灵活使用docker system df -v的命令进行故障排查分析。希望这个能帮到各位,有用就点个关注和收藏吧~

k8s docker空间使用分析与清理相关推荐

  1. Docker 磁盘空间使用分析与清理 解决磁盘空间不足

    用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响. 本文先对 Docker 的空间分析与清理进行说明,然后对 ...

  2. Apollo Docker 空间分析与清理

    空间使用分析 Docker 的内置 CLI 指令 docker system df ,可用于查询镜像(Images).容器(Containers)和本地卷(Local Volumes)等空间使用大户的 ...

  3. Docker源码分析(七):Docker Container网络 (上)

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part7 1.前言(什么是Docker Container) 如今,Dock ...

  4. docker ip地址_理解 Docker 网络(番外) -- 《Docker 源码分析》勘误

    前言 本来打算这篇文章是分析 Docker Overlay 网络是如何建立以及如何手动实现 Docker 的跨主机通信的.但是在完成了上一篇文章之后,打算找一些文章或者书籍印证我的文章是否正确.这时看 ...

  5. 云原生Java架构实战 K8s+Docker+KubeSphere+DevOps(上)

    云原生Java架构 K8s+Docker+KubeSphere+DevOps 云平台 私有网络VPC VPC的子网计算 VPC的交换机 重要概念 容器化 docker概念 青云服务器 centos安装 ...

  6. win7网站服务器空间怎么清理,window_Win7系统如何清理C盘空间?Win7系统清理C盘空间小技巧,  Win7系统清理C盘空间小技 - phpStudy...

    Win7系统如何清理C盘空间?Win7系统清理C盘空间小技巧 Win7系统清理C盘空间小技巧: 方法一:更改软件的缓存地址 1.一般的ie浏览器.qq.酷我音乐盒等文件的默认缓存文件都在c盘,所以我们 ...

  7. Windows下最快磁盘空间占用分析工具(wiztree)使用指南

    今天给各位小伙伴们种草一款Windows操作系统下的"磁盘空间占用分析"的工具,名字叫"WizTree". 相信大家日常都遇到过磁盘空间占满.找大文件困难.线上 ...

  8. Rancher+K8S+Docker集群搭建

    Rancher+K8S+Docker集群搭建 Ubuntu安装 准备工作:准备VMware+Ubuntu(ubuntu-18.04.5-live-server-amd64.iso) 1.1 虚拟机安装 ...

  9. Docker源码分析(一):Docker架构

    1 背景 1.1 Docker简介 Docker是Docker公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.目前,Docker可以在容器内 ...

最新文章

  1. 48.动态分区匹配算法(连续分区)
  2. java 树表_java 树与表心得
  3. XMLhttp学习应用
  4. java图片格式转化(例如jpg格式转化png)
  5. 机器学习的一些注意事项
  6. 二维凸包 Graham's Scan
  7. Systemd 入门教程之实战篇
  8. Element-UI Form表单 resetFields() 重置表单无效问题
  9. 信息学奥赛一本通 1123:图像相似度 | OpenJudge NOI 1.8 06:图像相似度
  10. java php 通讯录,基于ssh/bs/java/asp.net/php/web通讯录管理系统
  11. pdf-lib给pdf添加水印并预览、下载、打印
  12. activemq学习记录(二)(使用p2p模式和使用发布订阅模式去生产以及消费数据)
  13. Codeforces::GYM 102896E Easy Measurements
  14. yolov3中yolov3-voc.cfg文件中参数理解
  15. GhostXP_SP3电脑装机终极版V9.7 (NTFS版)
  16. Eclipse12:CookieSession
  17. Nexus的权限管理
  18. 备案过的域名解析到别的服务器,教你如何解析未备案的域名到国内服务器
  19. php 捕捉不了致命错误,php怎么捕获致命错误
  20. 设计一个名为complex的类来表示复数_因果图用例设计方法概念详解

热门文章

  1. ifeq makefile 或语句_Makefile ifeq、ifneq、ifdef和ifndef(条件判断)
  2. Facebook 发币后的 48 小时
  3. java 数组的长度_Java初学者:数组,得到数组长度
  4. Linux驱动中SD/MMC卡增加多个分区
  5. Python使用小教程03——tiff/grib/nc/hdf/txt数据的读写
  6. 【Python代码合集】高能预警,四个起床闹钟铃声,再也不敢赖床啦~(起床困难户专用)
  7. 【新书速递】重磅!混沌工程权威指南
  8. matlab矩阵运算带变量,MATLAB矩阵及其数值运算
  9. 工信部:中国智慧城市NRI世界排名62,与总体目标相去甚远
  10. 广东前七月进出口贸易总值达三千四百亿美元