docker 容器和镜像的清理
环境:本地虚拟机 ubuntu 20.04
背景
根目录磁盘空间不多,就只剩5个G左右了,操作需要,涉及到频繁创建/删除容器, 发现每创建一个容器,在删除后,磁盘空间并没有恢复。久而久之。根目录就满了。
docker 空间占用查看
yyx@ubuntu64:/$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 2.06GB 0B (0%)
Containers 4 3 598.1kB 0B (0%)
Local Volumes 39 3 5.854GB 5.325GB (90%)
Build Cache 0 0 0B 0B
虚拟机内实际运行的只有四个容器,但是这里显示容器卷有39个
$ docker system df -v 命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间
清理方法
# 删除无用卷
docker volume prune
删除后再次查看,空间即释放掉了。
其他清理容器/镜像的方法
1. 自动清理命令
# 对空间进行自动清理
docker system prune
"""
该命令所清理的对象如下:
已停止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
所有悬空的镜像
"""
docker system prune后可以加额外的参数,如:
docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息
另外除了system级别的,还有针对容器或是镜像级别的删除命令:
docker image prune:删除悬空的镜像。
# 悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定-t参数配置Tag导致的
docker container prune:删除无用的容器。
--默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
--如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
--$ docker container prune --filter "until=24h"
docker volume prune:删除无用的卷。
docker network prune:删除无用的网络
2. 手动清除
对于悬空镜像和未使用镜像可以使用手动进行个别删除:
1、删除所有悬空镜像,不删除未使用镜像:docker rmi $(docker images -f "dangling=true" -q)
2、删除所有未使用镜像和悬空镜像docker rmi $(docker images -q)
3、清理卷
如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):
删除所有未被容器引用的卷:docker volume rm $(docker volume ls -qf dangling=true)
4、容器清理
如果发现是容器占用过高的空间,可以手动删除一些:
删除所有已退出的容器:docker rm -v $(docker ps -aq -f status=exited)
删除所有状态为dead的容器docker rm -v $(docker ps -aq -f status=dead)