Docker 26.0 在 CentOS 7/8 的 3 种卸载方案对比:残留文件清理实测

Docker 26.0 在 CentOS 7/8 的 3 种卸载方案对比:残留文件清理实测 Docker 26.0 在 CentOS 7/8 的 3 种卸载方案对比与深度清理指南当你在 CentOS 系统上需要彻底清理 Docker 环境时可能会遇到各种残留文件和配置问题。本文将深入分析三种主流卸载方法的优劣并提供一套完整的清理方案确保你的系统恢复到安装前的纯净状态。1. 卸载前的准备工作在开始卸载 Docker 之前有几个关键步骤需要完成# 停止所有正在运行的容器 docker stop $(docker ps -aq) # 删除所有容器 docker rm $(docker ps -aq) # 删除所有镜像 docker rmi $(docker images -q) # 停止 Docker 服务 sudo systemctl stop docker sudo systemctl disable docker这些操作可以确保 Docker 不会在卸载过程中产生任何冲突或锁定文件。同时建议备份以下重要数据/var/lib/docker目录中的重要容器数据/etc/docker/daemon.json中的自定义配置任何你创建的 Docker 网络配置2. 三种卸载方法对比分析2.1 方法一使用 yum 卸载这是最基础的卸载方式适合大多数简单场景sudo yum remove docker-ce docker-ce-cli containerd.io优点操作简单一条命令完成自动处理依赖关系适合快速卸载场景缺点会留下大量配置文件和数据文件不适用于需要彻底清理的环境残留文件检查清单/var/lib/docker容器和镜像存储/etc/docker配置文件/var/run/docker.sockDocker 套接字文件2.2 方法二手动彻底清理对于需要完全清除 Docker 痕迹的场景建议采用这种方法# 卸载软件包 sudo yum remove docker-ce docker-ce-cli containerd.io # 删除残留文件和目录 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo rm -f /etc/systemd/system/docker.service.d/* sudo rm -f /var/run/docker.sock # 清理用户和组 sudo groupdel docker优点清理最彻底适合需要重新安装 Docker 的场景避免新旧版本冲突缺点操作步骤较多需要手动确认每个清理点操作复杂度对比表步骤yum卸载手动清理脚本清理软件包移除自动手动自动配置文件清理不清理手动自动数据文件清理不清理手动自动用户/组清理不清理手动自动适合场景简单卸载彻底清理批量部署2.3 方法三使用专用清理脚本对于需要频繁部署和卸载 Docker 的环境可以创建专用清理脚本#!/bin/bash # docker-cleanup.sh echo Stopping Docker services... systemctl stop docker systemctl disable docker echo Removing packages... yum remove -y docker-ce docker-ce-cli containerd.io echo Cleaning up files... rm -rf /var/lib/docker rm -rf /var/lib/containerd rm -rf /etc/docker rm -f /var/run/docker.sock rm -f /etc/systemd/system/docker.service echo Removing Docker group... groupdel docker echo Reloading systemd... systemctl daemon-reload systemctl reset-failed echo Docker cleanup complete!脚本使用方式chmod x docker-cleanup.sh sudo ./docker-cleanup.sh脚本优势一键完成所有清理操作可重复使用适合自动化部署确保每次清理的一致性3. 深度清理与残留检测即使按照上述方法卸载后仍可能有隐藏的残留。下面提供一套完整的检测和清理方案3.1 检测残留文件# 查找可能残留的Docker相关文件 sudo find / -name *docker* -exec ls -la {} \; # 检查内核模块 lsmod | grep -i docker3.2 清理网络配置Docker 会创建自定义网络接口和 iptables 规则需要特别清理# 删除Docker创建的网络接口 ip link delete docker0 # 清理iptables规则 sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -F sudo iptables -X3.3 清理存储驱动残留根据你使用的存储驱动overlay2、devicemapper等可能需要额外清理# 对于overlay2存储驱动 sudo rm -rf /var/lib/docker/overlay2 # 对于devicemapper存储驱动 sudo dmsetup remove_all sudo lvremove -f docker sudo vgremove -f docker4. 卸载后的系统恢复完成卸载后建议执行以下操作确保系统完全恢复# 清理yum缓存 sudo yum clean all sudo rm -rf /var/cache/yum # 重建rpm数据库 sudo rpm --rebuilddb # 检查系统服务状态 sudo systemctl list-units --typeservice | grep -i docker如果计划重新安装 Docker建议在卸载后重启系统sudo reboot5. 常见问题解决方案问题1卸载后/var/lib/docker无法删除解决方案# 确保没有进程占用 sudo lsof /var/lib/docker # 如果使用device-mapper先解除挂载 sudo umount /var/lib/docker/devicemapper问题2重新安装时提示旧配置文件存在解决方案sudo rm -rf /etc/docker/daemon.json sudo rm -rf /etc/containerd/config.toml问题3用户组残留导致权限问题解决方案# 检查docker用户组 getent group docker # 如果存在但无法删除检查关联用户 sudo gpasswd -d $USER docker sudo groupdel docker6. 最佳实践建议生产环境建议使用脚本化卸载方式确保每次清理的一致性开发环境建议可以保留/var/lib/docker目录以节省下次下载镜像的时间安全考虑彻底卸载后检查/etc/sudoers文件移除docker组的特权性能优化卸载后执行yum autoremove清理不再需要的依赖包对于需要频繁切换 Docker 版本的环境可以考虑使用容器化的 Docker-in-Docker 方案避免频繁安装卸载主机 Docker。