Docker 系统清理与维护完全指南:使用 prune 命令释放磁盘空间

在日常使用 Docker 的过程中,随着镜像、容器和卷的不断创建和使用,系统磁盘空间会逐渐被占用。如果不定期清理,不仅会浪费宝贵的存储资源,还可能导致 Docker 性能下降甚至系统崩溃。本文将详细介绍 Docker 的清理命令,帮助您有效管理 Docker 资源。

清理命令解析

完整清理命令

bash

docker image prune -a -f && docker container prune -f && docker volume prune -f && sudo systemctl restart docker

命令分解说明

1. 镜像清理 docker image prune -a -f

作用:清理所有未被使用的 Docker 镜像

参数解释

  • prune:Docker 的清理命令
  • -a:删除所有未被容器使用的镜像(包括 dangling 镜像和未被引用的镜像)
  • -f:强制删除,跳过确认提示

示例

bash

# 查看将要删除的镜像(预览模式)
docker image prune -a --dry-run

# 实际执行清理
docker image prune -a -f

2. 容器清理 docker container prune -f

作用:删除所有已停止的容器

参数解释

  • -f:强制删除,不需要手动确认

示例

bash

# 查看已停止的容器
docker ps -a --filter status=exited

# 清理已停止的容器
docker container prune -f

3. 数据卷清理 docker volume prune -f

作用:删除所有未被容器使用的数据卷

注意:数据卷通常包含重要数据,执行前请确保数据已备份

示例

bash

# 查看未被使用的卷
docker volume ls -f dangling=true

# 清理未使用的卷
docker volume prune -f

4. 服务重启 sudo systemctl restart docker

作用:重启 Docker 守护进程

适用场景

  • 解决 Docker 网络问题
  • 修复守护进程异常
  • 应用系统配置更改

分步清理教程

步骤 1:检查当前磁盘使用情况

在执行清理前,先检查 Docker 的资源使用情况:

bash

# 查看磁盘使用概况
docker system df

# 详细查看各类资源使用情况
docker system df -v

# 查看镜像列表
docker images

# 查看容器列表(包括已停止的)
docker ps -a

# 查看数据卷列表
docker volume ls

步骤 2:安全预览清理内容

在执行实际删除前,先预览哪些资源将被清理:

bash

# 预览将被删除的镜像
docker image prune -a --dry-run

# 预览将被删除的容器
docker container prune --dry-run

# 预览将被删除的数据卷
docker volume prune --dry-run

步骤 3:执行清理操作

方法一:分步执行(推荐新手)

bash

# 1. 清理镜像
docker image prune -a -f

# 2. 清理容器
docker container prune -f

# 3. 清理数据卷
docker volume prune -f

# 4. 重启 Docker 服务
sudo systemctl restart docker

方法二:一键执行

bash

docker image prune -a -f && docker container prune -f && docker volume prune -f && sudo systemctl restart docker

步骤 4:验证清理结果

清理完成后,验证磁盘空间释放情况:

bash

# 检查磁盘空间释放
df -h

# 查看 Docker 系统资源使用情况
docker system df

# 检查 Docker 服务状态
sudo systemctl status docker

高级清理技巧

1. 选择性清理镜像

bash

# 只清理 dangling 镜像(无名镜像)
docker image prune -f

# 按时间过滤清理镜像
docker image prune -a --filter "until=24h"

# 按标签过滤清理
docker rmi $(docker images --filter "dangling=true" -q)

2. 选择性清理容器

bash

# 删除指定时间前创建的容器
docker container prune --filter "until=24h"

# 删除所有退出状态的容器
docker rm $(docker ps -aq --filter status=exited)

3. 网络清理

bash

# 清理未使用的网络
docker network prune -f

# 预览网络清理
docker network prune --dry-run

4. 构建缓存清理

bash

# 清理构建缓存
docker builder prune -f

# 清理所有构建缓存(包括内联缓存)
docker builder prune -a -f

自动化清理方案

1. 创建清理脚本

创建 docker-cleanup.sh 文件:

bash

#!/bin/bash

echo "开始 Docker 系统清理..."
echo "================================"

# 记录开始时间
start_time=$(date +%s)

# 显示清理前磁盘使用情况
echo "清理前磁盘使用情况:"
docker system df

echo "------------------------"

# 执行清理操作
echo "1. 清理未使用的镜像..."
docker image prune -a -f

echo "2. 清理已停止的容器..."
docker container prune -f

echo "3. 清理未使用的数据卷..."
docker volume prune -f

echo "4. 清理未使用的网络..."
docker network prune -f

echo "5. 重启 Docker 服务..."
sudo systemctl restart docker

# 显示清理结果
echo "------------------------"
echo "清理后磁盘使用情况:"
docker system df

# 计算并显示耗时
end_time=$(date +%s)
duration=$((end_time - start_time))
echo "清理完成,耗时 ${duration} 秒"

2. 设置定时任务

使用 crontab 设置定期自动清理:

bash

# 编辑 crontab
crontab -e

# 每周日凌晨 3 点执行清理
0 3 * * 0 /path/to/docker-cleanup.sh >> /var/log/docker-cleanup.log 2>&1

# 每天凌晨 2 点执行基础清理
0 2 * * * docker system prune -f >> /var/log/docker-prune.log 2>&1

注意事项和风险提示

⚠️ 重要警告

  1. 数据备份:在执行清理前,确保重要数据已备份
  2. 生产环境:在生产环境中执行清理要格外谨慎
  3. 依赖关系:注意镜像和容器之间的依赖关系
  4. 停止服务:确保没有重要的容器在运行

安全建议

bash

# 先停止所有运行中的容器(谨慎使用)
docker stop $(docker ps -aq)

# 或者只停止特定容器
docker stop container_name1 container_name2

故障排除

常见问题解决

  1. 权限问题:bash# 添加用户到 docker 组 sudo usermod -aG docker $USER # 或者使用 sudo sudo docker system prune -f
  2. 空间未释放:bash# 检查是否有容器仍在引用镜像 docker ps -a # 强制删除所有容器(危险!) docker rm -f $(docker ps -aq)
  3. Docker 服务启动失败:bash# 查看 Docker 服务状态 sudo systemctl status docker # 查看 Docker 日志 sudo journalctl -u docker.service

总结

通过本文介绍的 Docker 清理命令和方法,您可以:

  • ✅ 有效释放磁盘空间
  • ✅ 维护 Docker 系统健康
  • ✅ 解决常见的 Docker 问题
  • ✅ 建立自动化的维护流程

建议根据实际需求选择合适的清理策略,定期执行维护操作,保持 Docker 环境的高效运行。

记住:在生产环境中执行任何清理操作前,请务必进行充分测试和备份!

转载:感谢您对路丁路笔记个人博客网站平台的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“来源路丁路笔记”。https://ludinglu.com/jiaocheng/704.html
上一篇