桂哥网络与你分享了如何清理Docker占用的磁盘空间。希望你看完这篇文章有所收获。大家一起讨论一下。
Docker占用了大量空间。每当我们运行容器、提取映像、部署应用程序和构建自己的映像时,我们的磁盘空间都会被占用很多。
如果你也为这个问题困扰,我们来看看Docker是如何使用磁盘空间的,如何回收。
可以通过以下命令查看docker占用的空间:
$ dockersystemdf
类型列出了码头工人使用的四种类型的磁盘:
图片:所有图片占用的空间,包括拉出来的图片和本地建的。
容器:运行容器占用的空间,表示每个容器读写层的空间。
本地卷:容器装载本地数据卷的空间。
构建缓存:在映像构建过程中生成的缓存空间(仅在使用构建工具包时可用,在Docker 18.09之后可用)。
最后一个可恢复的大小是可恢复的大小。
我们分别来看一下这几种类型。
容器的磁盘占用
每次创建容器时,都会创建一些文件和目录,例如:
/var/lib/docker/containers/ID目录。如果容器使用默认的日志模式,它的所有日志将以JSON的形式保存在这个目录中。
/var/lib/docker/overlay2目录包含容器的读写层。如果容器使用自己的文件系统保存数据,它将被写入该目录。
现在让我们从一个完全干净的系统开始,假设docker刚刚安装了:
首先,我们启动一个NGINX容器:
现在,运行df命令后,您将看到:
一张图片,126MB
容器
此时没有可回收空间,因为容器正在运行,镜像正在使用。
现在,我们在容器中创建一个100兆字节的空文件:
$ dockersec-tiwww \
ddif=/dev/zero of=test . img bs=1024 count=0 seek=$[1024 * 100]再次检查空格:
你可以看到容器占用的空间增加了。这个文件存储在这台机器的什么地方?
如上所述,它存储在容器的读写层。
当容器停止时,容器所占据的空间变成可回收的:
怎么回收?删除容器会删除与其关联的读写层所占用的空间。
您也可以一键删除所有停止的容器:
$dockercontainerprune
" alt="怎么清理Docker占用的磁盘空间的方法">删除容器后,镜像也可以回收了:
上面的 docker container prune
命令是删除停止的容器,如果想删除所有容器(包括停止的、正在运行的),可以使用下面这2个命令:
$dockerrm-f$(dockerps-aq) $dockercontainerrm-f$(dockercontainerls-aq)
镜像的磁盘占用
有一些镜像是隐形的:
子镜像,就是被其他镜像引用的中间镜像,不能被删除。
悬挂状态的镜像,就是不会再被使用的镜像,可以被删除。
下面的命令列出所有悬挂状态的镜像:
$dockerimagels-fdangling=true
删除这类镜像:
$dockerimagerm$(dockerimagels-fdangling=true-q)
或者:
$dockerimageprune
如果想删除所有镜像,可以使用下面的命令:
$dockerimagerm$(dockerimagels-q)
注意,正在被容器使用的镜像是不能被删除的。
数据卷的磁盘占用
数据卷是容器自身文件体统之外的数据存储。
例如容器中的应用有上传图片的功能,上传之后肯定不能保存在容器内部,因为容器内部的数据会随着容器的死掉而被删除,所以,这些图片要保存在容器之外,也就是数据卷。
比如我们运行了一个 MongoDB 容器做测试,导入了很多测试数据,这些数据就不是在容器内部的,是在数据卷中,因为 MongoDB 的 Dockerfile 中使用了数据卷。
测试完成后,删除了这个 MongoDB 容器,但测试数据还在,没被删除。
删除不再使用的数据卷:
$dockervolumerm$(dockervolumels-q)
或者:
$dockervolumeprune
Build Cache 的磁盘占用
Docker 18.09 引入了 BuildKit,提升了构建过程的性能、安全、存储管理等能力。
删除 build cache 可以使用命令:
$dockerbuilderprune
一键清理
通过上面的说明,我们知道了像容器、镜像、数据卷都提供了 prune
这个子命令,帮助我们回收空间。
其实,docker 系统层面也有 prune
这个子命令,可以一键清理没用的空间:
$dockersystemprune
定期执行这个命令是个好习惯。
看完了这篇文章,相信你对“怎么清理Docker占用的磁盘空间的方法”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
TikTok千粉号购买平台:https://tiktokusername.com/
TOP