跳转到内容

Docker存储清理

来自代码酷
Admin留言 | 贡献2025年5月1日 (四) 01:55的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

Docker存储清理[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Docker存储清理是管理Docker磁盘空间的重要操作。随着容器和镜像的频繁创建、删除,Docker会积累未使用的数据(如悬空镜像、停止的容器、未使用的卷和网络),占用大量磁盘空间。本指南将详细介绍如何识别和清理这些资源,适用于初学者和需要优化存储的高级用户。

为什么需要清理Docker存储[编辑 | 编辑源代码]

Docker的默认存储驱动(如`overlay2`)会保留以下冗余数据:

  • 悬空镜像(Dangling images):未被任何容器引用的中间镜像层。
  • 未使用的容器:已停止但未删除的容器。
  • 孤儿卷(Orphaned volumes):未被任何容器使用的数据卷。
  • 缓存构建层:构建镜像时生成的临时层。

长期不清理可能导致磁盘空间耗尽,影响系统性能。

清理方法[编辑 | 编辑源代码]

1. 查看当前磁盘使用情况[编辑 | 编辑源代码]

使用以下命令查看Docker存储分布:

  
docker system df

输出示例:

  
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE  
Images          10        6         2.1GB     800MB (38%)  
Containers      4         1         120MB     60MB (50%)  
Local Volumes   3         1         500MB     400MB (80%)  
Build Cache     5         0         300MB     300MB (100%)  

2. 删除悬空镜像[编辑 | 编辑源代码]

悬空镜像是未被标记或引用的镜像层,通常由重复构建或删除操作产生:

  
docker image prune

若需强制删除所有未被使用的镜像(包括未被容器引用的):

  
docker image prune -a

3. 清理停止的容器[编辑 | 编辑源代码]

删除所有已停止的容器:

  
docker container prune

4. 清理未使用的数据卷[编辑 | 编辑源代码]

孤儿卷可能包含旧数据,手动清理需谨慎:

  
docker volume prune

5. 清理构建缓存[编辑 | 编辑源代码]

构建镜像时生成的缓存层可通过以下命令清理:

  
docker builder prune

6. 一键清理所有未使用对象[编辑 | 编辑源代码]

综合清理镜像、容器、卷和网络:

  
docker system prune -a --volumes

页面模块:Message box/ambox.css没有内容。

实际案例[编辑 | 编辑源代码]

案例1:开发环境定期清理[编辑 | 编辑源代码]

开发者每天构建多次镜像,导致磁盘快速占满。可通过定时任务(Cron)每周运行:

  
0 3 * * 0 docker system prune -f

案例2:CI/CD流水线优化[编辑 | 编辑源代码]

在CI/CD中,每次构建后清理缓存和悬空镜像:

  
#!/bin/bash  
docker build -t my-app .  
docker run --rm my-app test  
docker image rm my-app  
docker builder prune -f

高级技巧[编辑 | 编辑源代码]

限制Docker日志大小[编辑 | 编辑源代码]

容器日志可能占用大量空间。全局限制日志大小(在/etc/docker/daemon.json中配置):

  
{  
  "log-driver": "json-file",  
  "log-opts": {  
    "max-size": "10m",  
    "max-file": "3"  
  }  
}

手动删除特定卷或镜像[编辑 | 编辑源代码]

若需精确删除某个对象,先查询ID再操作:

  
# 列出所有卷  
docker volume ls  
# 删除指定卷  
docker volume rm my_volume

存储驱动的影响[编辑 | 编辑源代码]

不同存储驱动(如overlay2devicemapper)的清理机制略有差异。可通过以下命令查看当前驱动:

  
docker info | grep "Storage Driver"

总结[编辑 | 编辑源代码]

定期清理Docker存储可节省磁盘空间并提升性能。关键命令总结:

操作 命令
删除悬空镜像 docker image prune
删除所有未使用镜像 docker image prune -a
清理停止的容器 docker container prune
清理未使用的卷 docker volume prune
一键清理所有资源 docker system prune -a --volumes

模板:Tip