docker system prune -a

docker system prune -a 是一个Docker命令,用于清理Docker系统中未使用的镜像、容器、网络和数据卷等资源。这个命令会删除所有未被使用的资源。

Total reclaimed space: 89.72GB 

docker 镜像占用磁盘
Docker 中查询磁盘占用情况命令: docker system df

可通过执行docker system prune 命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
【慎用】 docker system prune -a 命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。

Docker使用存储驱动来管理镜像和容器的文件系统。Overlay2是Docker推荐使用的存储驱动之一,因其高效性和稳定性而广受青睐。Overlay2通过分层存储和联合挂载的方式,实现了镜像和容器的快速创建与销毁。

 

Overlay2存储了什么?

[root@WXKYPL004147217 svr]# cd docker/
[root@WXKYPL004147217 docker]# ls
buildkit  containers  engine-id  image  network  overlay2  plugins  runtimes  swarm  tmp  volumes

[root@WXKYPL004147217 docker]# cd overlay2/
[root@WXKYPL004147217 overlay2]# ls
05f23817d7edbe4cba9a109d5cf51dbbe3e75a923e0197f4f029683a8924b777  80cc5f27c26bcf9166bdca91da845c3098c27286e212b170b1d818663eac4f4a       b072f205e0541168310561ad5ca01cd41a3e474603cff583b909bbceed26c8bf
16017f9ab1997508ed9295c2abdb5ef974e6f113af527d79d1fda99a02caa968  85f65ce62ed02ce40a1be00ff0e3ce50c017235c8db05e260d75f71115a1015a       b147d051fe95c7a0d5eee72fbdf5a13d2b99258e1094bd219ea8e2d33b2bacb3
3ce600945579a4ab1b78ca0d3227de0852710814e4c419ed87cadc9388fbba20  8d5080f8aadab340236089a9129fb02820c1d3ac1b0978828a97dd2b6c22409f       bac84d0052dd96ccdfb289d77d04ed2a79947792d4f6a5aed24f894b1ade9afd
45af9289364f6d3c155262961c5e7549c1863056cd4decc17a5d755a77532c09  97426f774a86ddd0e35603170cee7e7dd66a82262ca74b0b730a0e4eb8490a26       backingFsBlockDev
52e13e52daf88ec2ec2c303b29756954b6a84e4bb4e3ea82496c32c8b6cf1f84  a0991a0d3dd1f2825a3e2f1f95fc42a3c048ba4adde1af6ef198771b470bc1af       c39a03061868f9bca3b08948997715f44b299c19ce206147db432c8c0b4ac0a2
53d92c493f00e861f242991dcf800556160952bc9a344cf232cba67722b1391d  a0991a0d3dd1f2825a3e2f1f95fc42a3c048ba4adde1af6ef198771b470bc1af-init  f77d5a6abb91983ef2e5cb7ec785134f12a37288e80eff43f166d9970a2dca32
71457165cf490816b7c54be7011d2fc937f4ba05731bdf42ae497146c5166028  a4042206983fd4b4f164472df344c09515d25fced46b10ec63c7634f9bde5df8       l

[root@WXKYPL004147217 overlay2]# cd ..
[root@WXKYPL004147217 docker]# cd containers/
[root@WXKYPL004147217 containers]# ls
8327778f083029ad5e1128e0f638da9b247abd7c3354036b7989996f13b1a4ca
[root@WXKYPL004147217 containers]# docker ps -a
CONTAINER ID   IMAGE                                                                          COMMAND                  CREATED       STATUS       PORTS     NAMES
8327778f0830   harbor.web:90736c1_20240910_214913   "bash -c '/apps/svr/…"   2 weeks ago   Up 2 weeks            web_90736c1_20240910_215221

/var/lib/docker/overlay2目录下,主要存储了以下内容:

  1. 镜像层(Layers)每个Docker镜像都由多个层组成,每一层都代表镜像构建过程中的一个命令或修改。Overlay2将这些层以目录的形式存储在/var/lib/docker/overlay2/下的不同子目录中,每个子目录包含一个镜像层的所有文件和数据。

  2. 容器层(Containers):当您基于镜像创建容器时,Docker会为每个容器创建一个或多个额外的层,用于存放容器运行时的修改(如写入新文件或修改现有文件)。这些容器层也存储在/var/lib/docker/overlay2/下的特定子目录中。

  3. 元数据(Metadata):除了实际的文件系统层之外,Overlay2还存储了用于管理这些层的元数据,包括层之间的依赖关系、配置信息等。

 

 

如何清理/var/lib/docker/overlay2

随着Docker镜像和容器的不断增加,/var/lib/docker/overlay2目录可能会占用大量磁盘空间。以下是一些清理策略:

  1. 删除未使用的镜像和容器

    • 使用docker images列出所有镜像,并通过docker rmi命令删除不再需要的镜像。
    • 使用docker ps -a列出所有容器(包括已停止的),并通过docker rm命令删除不再需要的容器。

    注意:删除镜像时,如果镜像被某个容器所使用,Docker将不允许删除。您需要先删除或停止使用该镜像的容器。

  2. Docker系统清理命令

    • Docker提供了docker system prune命令,用于删除所有未使用的镜像、网络、卷和构建缓存。
    • 还可以使用docker system df来查看Docker使用的磁盘空间情况。
  3. 手动检查并删除

    • 在极少数情况下,您可能需要手动检查/var/lib/docker/overlay2目录,以确认是否有遗留的文件或目录。然而,这种方法风险较高,因为误删除文件可能会导致Docker服务异常。
  4. 设置Docker存储限制

    • 可以通过配置Docker守护进程(daemon)来限制镜像和容器的存储大小。这有助于防止/var/lib/docker/overlay2目录无限制地增长。
  5. 定期监控与清理

    • 将Docker的清理工作纳入日常的运维任务中,定期执行清理操作,以保持宿主机的磁盘空间充足。

总结

Overlay2作为Docker的存储驱动,在Docker的镜像和容器管理中扮演着重要角色。了解Overlay2的工作原理和存储内容,以及掌握有效的清理策略,对于保持Docker宿主机的健康运行至关重要。通过定期清理未使用的镜像和容器,设置存储限制,以及将清理工作纳入日常运维任务,您可以有效地管理Docker的存储资源,避免磁盘空间不足的问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐