一、虚悬镜像(none镜像)如何产生
1、 构建镜像过程中因为脚本错误导致很多镜像构建终止,产生很多none标签的镜像
2、 手动构建镜像的时候没有进行提交,遗留下来的垃圾镜像
详细了解虚悬镜像的产生可以查看 docker层和虚悬镜像
由于这些虚悬镜像也占用了大量的存储空间,所以需要删除,docker采用保守的方式来清理未使用的对象(镜像、容器、卷、网络),除非明确的要求,通常情况下docker不会删除这些垃圾对象。
对于每一种对象,docker都提供了
prune
命令进行修剪清理。
二、如何清理垃圾对象
1、 查看虚悬镜像
# 查看虚悬镜像,-f :表示过滤 dangling:表示虚悬镜像
docker images -f dangling=true
2、 清理虚悬镜像
# 1、使用添加过滤清除
docker rmi $(docker images -q -f dangling=true)
# 2、使用prune修剪清除
docker image prune
3、 清理无容器使用的镜像
docker image prune -a
默认情况下,系统会提示是否继续。要绕过提示,请使用 -f
或 --force
标志。
可以使用 --filter
标志使用过滤表达式来限制修剪哪些镜像。例如,只考虑 24 小时前创建的镜像:
docker image prune -a --filter "until=24h"
4、 清理所有停止的容器
docker container prune
5、 清理所有没有被容器使用的卷
docker volume prune
卷可以被一个或多个容器使用,并占用 Docker
主机上的空间。卷永远不会被自动删除,因为这么做会破坏数据。
6、 清理所有没有被容器使用的网络
docker network prune
Docker
网络不会占用太多磁盘空间,但是它们会创建 iptables
规则,桥接网络设备和路由表条目。要清理这些东西,可以使用 docker network prune
来清理没有被容器未使用的网络。
7、 清理所有虚悬镜像,没有使用的容器、网络
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
docker system prune
命令是修剪镜像、容器和网络的快捷方式。在 Docker 17.06.0 及以前版本中,还好修剪卷。在 Docker 17.06.1 及更高版本中必须为 docker system prune
命令明确指定 --volumes
标志才会修剪卷。