前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >删除容器能不能减少磁盘空间使用

删除容器能不能减少磁盘空间使用

作者头像
SRE运维实践
发布2019-07-08 14:49:40
1.3K0
发布2019-07-08 14:49:40
举报
文章被收录于专栏:SRE运维实践SRE运维实践

容器磁盘空间

在维护一个容器组成的基础设施部分,运行的时间长了,总是会碰到各种各样的磁盘问题,不是日志不规范,就是各种路径不对。

在一个系统经常升级之后,也会残留各种容器,或者镜像,或者停止的容器,从而导致占用磁盘空间。

容器主要分为几个部分占用磁盘空间:镜像,容器,挂载的volume。

在使用镜像的时候,由于每次进行升级,都需要将镜像从镜像中心拉到本地,久而久之,本地的镜像就很多了,dockerfile不规范,运维两行泪,在写dockerfile的时候,如果写的好,那么每次磁盘空间的占用只有一点点,如果写的不好,那么。。。弄死他,瞎写。

在写dockerfile的时候,可以隔离出两个层,一个是不变层,一个是变化层,将不变的层可以作为base image,从而每次变化image的只有上面少量的大小。在进行设计baseimage的时候,可以将所有的基本服务装上去,然后将这个镜像作为所有镜像的基础镜像,从而可以节省很大的磁盘空间,例如基础的占用2G,服务器上有10个容器,那么其实底层的10个G都是共享的,aufs了解一下。。

在运行容器的时候,一般升级之后,都要删除老的容器,有些平台可以做到自动回收,而有些,并不可以,需要进行手动清理,从而需要查看容器的状态,一种是exited,一种是dead的。对于状态为dead的,一般是由于设备繁忙导致,找到占用的进程,然后杀死,再进行删除就好了。

对于容器占用的磁盘空间,一般都是在merge下,从而可以从这里直接删除,而容器的一些日志文件,则是由dockerd的参数控制,文件的大小,文件的个数。当容器的日志都打到这个位置时候,如果删除容器能节省很大的磁盘空间,有的时候,就是因为这个原因导致磁盘爆满。

对于挂载的目录,当你运行容器的时候使用-v进行挂载的时候,容器的命令是不会进行统计的,而对于dockerfile的volume命令,则是可以进行统计的。从而对于这两种不同的挂载方式,清理的方案也不同。挂载的目录需要直接找到volume的路径进行删除,而对于-v的形式,则是完全不统计,因为可能挂载在其他的磁盘目录下。

在使用docker ps -s的时候,可以显示容器占用的大小,虚拟大小,表示使用的lower层是共享,而直接占用的大小,基本上可写层的大小,但是这个可写层是不包括volume挂载的大小的,从而在统计这个时候,注意如果删除容器,能节省的磁盘空间基本上就是前面的数字了。

在上面图中,可以看到du显示的数据差别很大,但是对于df来说,显示是ok的,基本不变,why?

对于df来说,是站在文件系统的角度来看的,所以统计是准确的,哪些使用了哪些没使用,而对于du则是站在文件的角度来看,他会统计占用了多少快,按照道理来说,du应该更加准确,但是这里是aufs,从而导致进行merge的时候,会统计到merge的目录,当停止容器的时候,你会发现挂载的目录也不见了,从而无法统计到。

从上图可以看到,当新创建了一个镜像之后,镜像的大小显示为193M,但是实际上并不是,在docker1.13之后,有专门的命令system来查看。

reclaiabele表示使用的空间都可以进行回收,镜像没有使用,镜像是dangling状态,容器是停止状态,volume没有使用状态,build的时候的cache文件;而对于共享的大小,则是一个是其他的lowerdir,unique的表示这个镜像单独的大小。从而当删除一个升级的centos-ssh的镜像的时候,空间大小只能减少91M,而不是230M,幻象,你懂得。。。

docker ps -s不会统计volume的大小,但是会统计其他的空间,而docker system df中会统计本地volume的大小。

当使用-v挂载的是指定的目录的时候,这个时候,无论是ps或者system都不会进行统计,所以呢,在删除容器的时候,可以使用docker rm -fv来强制删除。

当删除无用的挂载卷的时候,也可以使用docker volume prune,当然要注意是不是持久数据,删除了就找不好。

当主机上有100个容器的时候,如何来快速找到相关需要删除的容器呢,首先可以使用docker ps -s,可以找到是不是容器本身的问题;如果不是,那就进入容器查看分区的情况,这个时候,也就是查看各个挂载的-v的空间的大小;如果不是,那就在看看是不是其他的目录造成了空间太大,对docker root进行统计;如果再不是,那就查看容器的日志文件的大小,看看是否对dockerd设置了文件的个数和文件大小的rotate。

回到标题的问题,删除容器能不能建超磁盘空间使用,可以,但是可能没你想象中的那么多。可能你的努力和心血都是白费的,so。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档