Docker,请做好自己的清理工作

最近,我们开始对一些应用程序进行docker化,不得不说,我简直爱上了Docker!这是一个非常棒的工程,在AWS EC2的软件运用的基础上,它让我们的生活变得更加轻松。但是,我们在使用Docker时碰到的一个问题是它的疯狂的占用磁盘的情况。我们在Amazon Linux上运行Docker,并且我们有一个构建服务器来构建Docker镜像作为构建管道的一部分。一旦建立,图像会通过一个Ansible的手册推送到我们的服务器。从这点来看,它确实值得更多的关注。

其实我们注意到,随着时间的推移,docker似乎吞噬了主机的磁盘空间。快速的df -h显示/ var / lib / docker正在增长到几乎覆盖整个磁盘的地步。所以我们四处寻找解决方案,并提出来以供大家了解。

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

当Docker容器存在时,容器不会自动删除。您可以使用“docker ps -a”命令键查看所有容器,清理退出的容器,使用的命令如下。

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

这将删除退出的容器。-v标志表示所有不需要的容器都会被删除。假如没有这样的容器,你会看到如下的错误信息。

docker:“rm”至少需要1个参数。请参阅“docker rm -help”。

这意味着没有什么东西可以删除,你可以顺利通过。

2.删除不需要的“悬挂”映像。

Docker会保留您在磁盘中使用的所有映像,即使这些映像没有正在运行。这样做就可以保证在本地“缓存”中具有我们需要的映像。这简直太棒了,因为当你想拉取一个依赖于这些映像的图像,或者当你正在构建一个图像时,所有这些资源都是本地可用的。坏消息是,这会大大的消耗磁盘空间!

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

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

同样,如果你没有任何这样的映像,你可能会得到一个错误消息,说明rmi命令需要一个参数。

还没有足够的空间?这个“vfs”目录是什么?

如果您的docker目录仍占用空间,那可能意味着您的磁盘中有不需要的容量体积。我们传递给rm命令的-v标志通常会顾及到这一点。但是有时候,如果关闭容器的方法不能自动删除容器,那么vfs目录会变得非常快。我们可以通过删除不需要的磁盘容积来回收这个空间。要做到这一点,有一个码头的图像,你可以使用!

以下是如何运行它。

码头 运行 - v  / var / run / docker。sock:/ var / run / docker。袜子 - v  / 无功/ lib中/ 泊坞窗:/ 无功/ lib中/ 泊坞窗 - RM  马丁/ 泊坞窗- 清理- 卷

如果你想要安全运行,看看它将要删除什么,只需要传递-dry-run作为参数。

当这个程序运行时,它会做删除所有不需要容积量的准备,然后释放你的磁盘空间。

4.我知道这很好,我每次都必须这样做吗?

那么接下来的问题当所有程序运行正常的情况下,只要我们的服务器被填满,我们就不得不手动运行它。所以我们决定对其进行自动化。这于crontabs是一件轻而易举的事情。把所有上面的命令放到/etc/cron.daily/目录下的文件中。我们在该目录中创建了一个名为docker-clean的文件,并具有执行权限。该文件包含以下内容。

docker  rm  - v  $(docker  ps  - a  - q  - f  status = exited)
docker  rmi  $(docker  images  - f  “dangling = true”  - q)
码头 运行 - v  / var / run / docker。sock:/ var / run / docker。袜子 - v  / 无功/ lib中/ 泊坞窗:/ 无功/ lib中/ 泊坞窗 - RM  马丁/ 泊坞窗- 清理- 卷

Linux将每天自动运行这个工作,并在Docker化后进行清理工作。我个人认为这应该作为一个管家功能加入到docker守护进程中。不管怎么说吧,码农们也很自豪可以建造一个这样的工具。

本文的版权归 庹阳 所有,如需转载请联系作者。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

解决 windows VPS 远程连接出现关闭事件跟踪程序

1102
来自专栏Java后端技术

Docker三十分钟快速入门(下)

  上篇文章我们进行了Docker的快速入门,基本命令的讲解,以及简单的实战,那么本篇我们就来实战一个真实的项目,看看怎么在产线上来通过容器技术来运行我们的项...

842
来自专栏友弟技术工作室

docker微服务初体验配置文件composedocker compose使用

6985
来自专栏乐享123

Docker中的网络

1896
来自专栏blackpiglet

如何在 Kubernetes 环境中搭建 MySQL (二):在 cloud native 环境下配置 MySQL 的几个关键点

  MySQL 在 Kubernetes 环境中运行这件事情本身并不困难,最简单的方式就是找到 MySQL 的 Docker image,跑起来就行了,但是要做...

1063
来自专栏郭耀华‘s Blog

onSaveInstanceState和onRestoreInstanceState触发的时机

先看Application Fundamentals上的一段话:  Android calls onSaveInstanceState() before t...

3137
来自专栏素质云笔记

caffe镜像︱window10+docker+ubuntu14.04+caffe镜像的简单尝试

win10专业版可以利用Hyper-V开启docker,一般升级而来的都是家庭版,现在要升级到win10专业版, 需要产品秘钥。 github网址:h...

2989
来自专栏友弟技术工作室

docker微服务初体验

在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、单个服务的设计。 而所谓服...

4858
来自专栏编程坑太多

跟我一起学docker(13)--docker Machine的使用

2454
来自专栏编程坑太多

『中级篇』容器的资源限制(22)

15110

扫码关注云+社区