Docker正在填充我的磁盘空间

我做了一个Docker课程来实现它,我正在尝试迁移我的第一个应用程序。 在日常使用中,我发现很难追踪我的磁盘可用空间。 我注意到,每次我运行一个图像并删除,它不会返回到原来的可用空间量。

生活的循环,我正在给我的容器,从头开始删除是:dockerbuild设…

  • docker运行CONTAINER_TAG
  • docker停止CONTAINER_TAG
  • rm docker CONTAINER_ID
  • rmi docker image_id

自定义的容器从节点和标准的redis运行。 我的操作系统是OSX 10.11.6

在一天结束的时候,我看到我一直在输Mbs。 我究竟做错了什么? Docker这个caching也许是我错过了道路上的东西?

在Mac上的Docker有一个额外的问题,是伤害了很多人:docker.qcow2文件可以增长比例(高达64GB),永远不会缩小自己。

https://github.com/docker/for-mac/issues/371

正如djs55的答复之一所述,这是计划中要解决的问题,但这不是一个快速的解决scheme。 引用:

.qcow2作为最大尺寸为64GiB的块设备向VM公开。 由于新文件是通过容器在文件系统中创build的,所以新扇区被写入块设备。 这些新的扇区被追加到.qcow2文件,导致它增长的大小,直到它最终完全分配。 当它达到这个最大尺寸时停止增长。

我们希望能够分几个阶段来解决这个问题:(注意这仍然是在计划/devise阶段,但是我希望它能给你一个想法)

1)我们将切换到支持TRIM的连接协议,并在qcow2旁边的元数据文件中实现自由块跟踪。 我们将创build一个压缩工具,它可以离线运行来收缩磁盘(有点像qemu-img转换,但没有dd if = / dev / zero,它应该是快的,因为它已经知道空的空间)

2)假设速度足够快,我们将通过虚拟机重启来自动运行压缩工具

3)我们将切换到在线压缩器(这在编程语言中有点像GC)

我们也正在考虑使.qcow2的最大尺寸可configuration。 也许64GiB对于某些环境来说太大了,小的上限会有帮助?

有三个Docker存储区可以挂载,因为Docker是谨慎的 – 它不会自动删除其中的任何一个:退出的容器,未使用的容器卷,未使用的图像层。 在具有大量构build和运行的开发环境中,可能会有很多磁盘空间。

这三个命令可以清除任何不被使用的东西:

  • docker rm $(docker ps -a -q) – 删除停止的容器
  • docker rmi $(docker images -f "dangling=true" -q) – 删除任何图像中未使用的图像图层
  • docker volume rm $(docker volume ls -qf dangling=true) – 删除任何容器未使用的卷。

这些操作是安全的,它们不会删除图像引用的图像层或容器使用的数据卷。 您可以将它们别名,和/或将它们放在CRON作业中以定期清理本地磁盘。

 docker container prune docker system prune 

关于如何限制docker磁盘空间有几个select,我会开始通过限制/旋转日志: docker容器日志采取我的所有磁盘空间

例如,如果您有最新的docker版本,可以使用每个容器的--log-opt max-size=50m选项来启动它。 另外 – 如果你有旧的,未使用的容器,你可以考虑看看位于/var/lib/docker/containers/*/*-json.log的docker日志