docker的磁盘管理及清理
在宿主主机中使用docker,拉取镜像和建立容器,时间长了可能会造成磁盘紧张,这时候可能需要进行清理一些无用的docker数据。在数据清理方面,docker自身提供了很好的清理和管理方式,下面简单介绍一下。
首先,我们可以查看Docker磁盘空间的占用情况:
1 | docker system df |
更详细的查看使用参数-v:
1 | docker system df -v |
如果磁盘占用过多,就需要清理无用的数据,docker提供了system级的自动清理方式。对磁盘空间进行自动清理的命令:
1 | docker system prune |
注意:这个命令具体清理的数据有:
a、已停止的容器
b、未被任何容器使用的卷
c、未被任何容器所关联的网络
d、所有悬空的镜像
docker system prune这个命令后可以使用额外参数,如:
一并清除所有未被使用的镜像和悬空镜像:
1 | docker system prune -a |
用以强制删除,不提示信息:
1 | docker system prune -f |
需要说明的:
已使用的镜像:指所有已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的所有容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像。
悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像,通常是由于镜像编译过程中未指定-t参数配置Tag导致的。
另外除了system级别的,还有针对容器或是镜像级别的删除命令:
删除悬空的镜像:
1 | docker image prune |
删除无用的容器:
1 | docker container prune |
注意:
默认情况下docker container prune命令会清理掉所有处于stopped状态的容器,如果不想那么残忍统统都删掉,也可以使用–filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
1 | docker container prune --filter "until=24h" |
删除无用的卷:
1 | docker volume prune |
删除无用的网络:
1 | docker network prune |
除了docker的自动清理,也可手动指定条件进行清理。
对于悬空镜像和未被使用的镜像可以使用手动进行个别删除:
1、删除所有悬空镜像,不删除未使用镜像:
1 | docker rmi $(docker images -f "dangling=true" -q) |
2、删除所有未被使用的镜像和悬空镜像:
1 | docker rmi $(docker images -q) |
3、清理卷:
如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用)。删除所有未被容器引用的卷:
1 | docker volume rm $(docker volume ls -qf dangling=true) |
4、容器清理:
如果发现是容器占用过高的空间,可以手动删除一些。
删除所有已退出的容器:
1 | docker rm -v $(docker ps -aq -f status=exited) |
删除所有状态为dead的容器:
1 | docker rm -v $(docker ps -aq -f status=dead) |