云计算核心技术Docker教程:Docker清理磁盘空间
用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响,这时候我们就需要经常清理让Docker环境如同初装一样纯净。
docker 占用的空间可以通过下面的命令查看:
$ docker system df
TYPE 列出了docker 使用磁盘的 4 种类型:
Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers:运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes:容器挂载本地数据卷的空间。
Build Cache:镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
可知,Docker镜像占用了2.45GB磁盘,Docker容器占用了5.8KB磁盘,Docker数据卷占用了磁盘未使用。
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无tag的镜像。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉,但是使用这些命令时会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了,所以使用是一定要注意。
执行docker system prune -a命令Docker占用的磁盘空间减少:
对于旧版的Docker(版本1.13之前),是没有docker system命令的,因此需要进行手动清理。这里给出几个常用的命
删除所有关闭的容器
$ docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
删除所有无tag的镜像:
docker rmi $(docker images | grep "^" | awk "{print $3}")
docker rmi $(docker images | grep "^" | awk "{print $3}")
docker rmi $(docker images | grep "none" | awk '{print $3}')
删除所有未被任何容器关联引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)
Docker存储使用容器内的业务日志务必配置轮询覆写,或者使用日志驱动将日志输出到外部存储这样可以避免日志文件持续增长,占用过高磁盘空间。另外可以结合外部监控对宿主机的磁盘空间使用情况进行监控和告警。