清理 docker 占用的磁盘空间
一、docker占用的空间可以通过下面的命令查看:
docker system df
TYPE 列出了docker使用磁盘的4中类型:
Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的
Containers:运行的容器占用的空间,表示每个容器的读写层的空间
Local Volumes:容器挂载本地数据卷的空间
Build Cache:镜像构建过程中产生的缓存空间
RECLAIMABLE:可回收大小
二、容器的磁盘占用
每次创建一个容器时,都会有一些文件和目录被创建,例如:
/var/lib/docker/containers/ID目录,如果容器使用了默认的日志模式,他的所有日志都会以JSON形式保存到此目录下。
/var/lib/docker/overlay2 目录下含有容器的读写层,如果容器使用自己的文件系统保存了数据,那么就会写到此目录下。
命令删除停止的容器
docker container prune
删除所有的容器(包括停止、正在运行的)
docker rm -f $(docker ps -aq)
docker container rm -f $(docker container ls -aq)
三、镜像的磁盘占用:
有些镜像是隐形的:
子镜像,就是被其他镜像引用的中间镜像,不能被删除
悬挂状态的镜像,就是不会再被使用的镜像,可以被删除
下面的命令列出所有悬挂状态的镜像:
docker image ls -f dangling=true
删除这类镜像:
docker image rm $(docker image ls -f dangling=true -q)
或者 docker image prune
删除所有镜像:
docker image rm $(docker image ls -q)
正在被容器使用的镜像是不能被删除的
四、数据卷的磁盘占用
数据卷是容器自身文件之外的数据存储
列入容器中的应用有上传图片功能,上传之后肯定不能保存在容器内部,因为容器内部的数据会随着容器的死掉而被删除,所以这些图片要保存在容器之外,也就是数据卷
删除不再使用的数据卷
docker volume rm $(docker volume ls -q)
或者 docker volume prune
五、Build Cache 的磁盘占用
Docker18.09引入了BuildKit,提升了构建过程的性能、安全、存储管理等能力
删除build cache可以使用命令:
docker builder prune
一键清理没用的空间:
docker sysytem prune
docker日志清理脚本
创建一个clean_docker_log.sh
#!/bin/sh
echo “====== start clean docker containers logs ======”
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo “clean logs : $log”
cat /dev/null > $log
done
echo “====== end clean docker containers logs ======”
chmod +x clean_docker_log.sh
./clean_docker_log.sh
设置Docker容器日志大小
本作品采用《CC 协议》,转载必须注明作者和本文链接