清理 docker 占用的磁盘空间

臭大佬 2023-03-13 16:44:13 1913
Docker 
简介 清理 docker 占用的磁盘空间

问题

Docker 很占用空间,每当我们运行容器、拉取镜像、部署应用、构建自己的镜像时,我们的磁盘空间会被大量占用。

如果你也被这个问题所困扰,咱们就一起看一下 Docker 是如何使用磁盘空间的,以及如何回收。

方法

查看 docker 占用的空间

用于查看Docker的磁盘使用情况:

docker system df

TYPE 列出了docker 使用磁盘的 4 种类型:

Images:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers:运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes:容器挂载本地数据卷的空间。
Build Cache:镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
最后的 RECLAIMABLE 是可回收大小。

下面就分别了解一下这几个类型。

容器的磁盘占用
每次创建一个容器时,都会有一些文件和目录被创建,例如:

/var/lib/docker/containers/ID目录,如果容器使用了默认的日志模式,他的所有日志都会以JSON形式保存到此目录下。

/var/lib/docker/overlay2 目录下含有容器的读写层,如果容器使用自己的文件系统保存了数据,那么就会写到此目录下。

清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

docker system prune

将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker

docker system prune -a

一键删除所有已经停止的容器

docker container prune

上面的 docker container prune 命令是删除停止的容器,如果想删除所有容器(包括停止的、正在运行的),可以使用下面这2个命令:
docker rm -f (dockerps−aq) docker container rm -f $(docker container ls -aq) 镜像的磁盘占用,有一些镜像是隐形的:
子镜像,就是被其他镜像引用的中间镜像,不能被删除。
悬挂状态的镜像,就是不会再被使用的镜像,可以被删除。
下面的命令列出所有悬挂状态的镜像:
docker image ls -f dangling=true删除这类镜像:dockerimagerm(docker image ls -f dangling=true -q)或者:docker image prune
如果想删除所有镜像,可以使用下面的命令:dockerimagerm(docker image ls -q)
注意,正在被容器使用的镜像是不能被删除的。

数据卷的磁盘占用

数据卷是容器自身文件体统之外的数据存储。
删除不再使用的数据卷:

docker volume prune

Build Cache 的磁盘占用

Docker 18.09 引入了 BuildKit,提升了构建过程的性能、安全、存储管理等能力。
删除 build cache 可以使用命令:

docker builder prune

一键清理

通过上面的说明,我们知道了像容器、镜像、数据卷都提供了 prune这个子命令,帮助我们回收空间。

其实,docker 系统层面也有 prune 这个子命令,可以一键清理没用的空间:

docker system prune

本文转载:https://www.cnblogs.com/seaskyccl/articles/16424203.html