Docker-如何清理磁盘占用

最近开始打包我们的一些应用,不得不说,我已经爱上了Docker这个工具。在AWS EC2上,它的存在使我们的工作方便了许多。然而,我们遇到的唯一问题是Docker的磁盘占用问题。我们在Amazon Linux的主机上运行Docker,另外我们有一个扩展服务器用来建立Docker镜像作为我们的build pipeline。一旦建立成功,就会将镜像通过ansible-playbook推送到我们的服务器上。如果可能的话我会在我的blog上介绍更多关于它的内容。

我们注意到随着时间的推移,Docker似乎占用了主机的所有磁盘空间。输入df -h 显示 /var/lib/docker 目录增长到几乎覆盖整个磁盘的程度。所以我们四处寻找,得到了以下的解决办法。

1.确保已退出的容器被删除

如果一个docker 容器存在时,这个容器不能被自动删除。你可以通过

docker ps -a

命令查看所有的容器。如果要清理所有已退出的容器,可以使用

docker rm -v $(docker ps -a -q -f status=exited)

这条指令会删除所有已经退出的容器。

-v

指删除任何不再需要的docker容器。如果没有这样的容器会返回

docker: “rm” requires a minimum of 1 argument. See ‘docker rm –help’.

这意味着没有什么可以被删去。

2.删除不需要的“空”图像。

docker会保存所有的镜像文件在你的磁盘,即使不经常运行。

这样做好处是为了让它在本地的“缓存”中有必要的镜像文件。因为当你想pull一个依赖于那些镜像文件的镜像,或者当你创建一个镜像文件时,你可以使用本地缓存中的镜像文件。坏处是这极大地占用了磁盘空间!

移除这些不需要的图像的命令是:

docker rmi $(docker images -f "dangling=true" -q)

同样,您可能会收到一条错误消息,如果您没有任何这样的图像。

3.还是没有足够的空间?VFS目录是什么?

如果你的docker目录仍然占据着大量空间,那可能是因为多余的卷占用了你的磁盘。RM命令的-v命令通常会处理这个问题。但有时,如果你关闭容器不会自动删除容器,VFS目录将增长很快。我们可以通过删除不需要的卷来恢复这个空间。要做到这一点,有一个Docker镜像,你可以使用如下命令来运行它:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes

如果你想要安全,可以来看看它删除了什么。

当程序运行时,它将会删除所有不需要的卷,并且释放空间。

4.一切都好,我仍然需要运行吗?

然后,下一个问题是,尽管一切都很好,但当我们的服务器填满时,我们必须手动运行它。这样很麻烦!

所以我们要让主机自动运行它。

把上面所有的命令到一个文件在/ etc / cron.daily/目录。我们创建了一个名为docker-clean的文件在该目录下,并且赋予其执行权限。该文件包含以下内容:

docker rm -v $(docker ps -a -q -f status=exited)

docker rmi $(docker images -f "dangling=true" -q)

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes

Linux将会自动运行这个任务在每次docker执行之后。我个人认为,这应该就像嵌入到docker进程的管家一样。

最后,还是要感谢Docker Team 团队建立了如此好用的工具

本文的版权归 Shedray大数据专栏 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏along的开发之旅

文加图, 理解Http请求与响应

在讲解OkHttp之前, 我们首先来个高清大图, 看下http请求的整个步骤, 有个整体概念.

622
来自专栏码神联盟

架构之路 | 浅谈单点登录(SSO)技术实现机制

1何为单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需...

3698
来自专栏小白的技术客栈

系统入侵后的排查思路及心得

入侵后的总结 入侵后的总结 昨天发布Linux被入侵及其如何检查,今天这一篇主要是一些排查思路,仅供大家参考。 ? 写在前面 首先,确保系统密码符合密码复杂...

3396
来自专栏散尽浮华

linux下清除Squid缓存的方法记录

在日常运维工作中,只要用到squid缓存服务,就会常常被要求清理squid缓存。 比如公司领导要求删一篇新闻,新闻是生成的静态。运维人员把服务器上静态的新闻页面...

17910
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Nagios 4并监控服务器

在本教程中,我们将介绍在Ubuntu 14.04上安装非常流行的开源监控系统Nagios 4。我们将介绍一些基本配置,以便您可以通过Web界面监控主机资源。我们...

640
来自专栏PHP技术

Docker 入门教程

2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文...

3344
来自专栏阮一峰的网络日志

Docker 入门教程

2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文...

3253
来自专栏菜鸟计划

HTTP请求详解

使用http协议进行前后端通信 web使用一种名为HTTP(HyperText Transfer Protocol),超文本传输协议作为规范,完成从客户端到服务...

4047
来自专栏跟着阿笨一起玩NET

MySql可视化工具MySQL Workbench使用教程

MySQL Workbench 为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能。

300
来自专栏LIN_ZONE

Linux各目录及每个目录的详细介绍(转载)

Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:

822

扫码关注云+社区