Docker空间清理

Docker空间清理是容器化运维的基础,可以防止磁盘耗尽引发服务宕机或构建失败,同时降低存储成本、提升CLI响应与备份迁移效率,并通过移除含漏洞的废弃镜像减少安全攻击面,保障系统的稳定性、经济性与安全性。


一、查看 Docker 占用

在动手清理之前,首先要搞清楚问题的具体构成, docker system df​ 命令能清晰地展示 Docker 各个组件的磁盘使用情况:

docker system df

执行后,会看到类似如下的输出:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        3         5.2GB     4.1GB (78%)
Containers      5         3         1.1GB     1.1GB (99%)
Local Volumes   8         2         2.3GB     2.0GB (86%)
Build Cache     15        0         800MB     800MB (100%)

关键词的含义是:

  • TOTAL​: 组件的总数量。
  • ACTIVE​: 正在被使用的数量(例如,正在运行的容器)。
  • SIZE​: 组件占用的总磁盘空间。
  • RECLAIMABLE​: 可回收的空间,也就是可以安全清理的部分 。

除了总体概览,还可以深入查看具体细节:

a. 查看所有镜像(包括悬空镜像)

docker images

b. 专门查看“悬空”(dangling)镜像(无标签,通常可删)

docker images --filter "dangling=true"

c. 查看所有容器(包括已停止的)

docker ps -a

二、清理空间

1. 一键自动清理

使用 docker system prune 命令,它能一次性清理掉所有未被使用的资源。

清理所有停止的容器、未使用的网络、悬空镜像和构建缓存:

sudo docker system prune -f

清理所有未使用的镜像(包括有标签但未被引用的)、容器、网络和数据卷:

sudo docker system prune -a -f --volumes

参数详解:

  • -a​ (--all​):不仅删除悬空镜像,还会删除所有未被任何容器引用的镜像(即使它们有标签)。
  • --volumes​:删除所有未被容器挂载的数据卷。数据卷用于持久化存储,删除前请确保里面没有重要数据 。
  • -f​ (--force​):强制执行,无需交互式确认。如果希望在删除前逐项确认,可以去掉这个参数。

重要提示:docker system prune 永远不会影响正在运行的容器及其使用的资源,因此在生产环境中使用也是相对安全的 。

2. 手动精准清理

如果只想清理特定类型的资源,也可以手动操作

仅清理悬空镜像:

docker image prune -f

仅清理未使用的数据卷:

docker volume prune -f

仅清理未使用的网络:

docker network prune -f
下一篇 Linux新增数据盘挂载
目录