如何在 Ubuntu 系统上完全移除 Docker 及其所有数据

在使用 Ubuntu 进行开发或学习时,Docker 是一个不可或缺的工具。但有时,你可能需要卸载它,例如:为了解决版本冲突、清理环境,或者准备进行全新的安装。仅仅通过 apt remove 命令并不能完全清除 Docker 留下的所有文件和数据。

本文将提供一份详尽的指南,帮助你在 Ubuntu 系统上彻底、干净地卸载 Docker,涵盖所有主流的安装方式。

写在前面:卸载前的准备

在开始卸载之前,请务必注意:

  • 数据备份 :卸载过程会删除所有 Docker 镜像、容器、卷和网络。这是一个不可逆的操作。如果你有任何需要保留的容器或数据卷,请确保提前备份。

  • 停止服务:首先停止所有正在运行的 Docker 容器和 Docker 服务本身。

    bash 复制代码
    # 停止所有正在运行的容器
    docker stop $(docker ps -aq)
    
    # 停止 Docker 服务
    sudo systemctl stop docker docker.socket containerd

第一步:确定你的 Docker 安装方式

选择正确的卸载方法至关重要。你可以通过以下命令快速判断:

  • 检查安装来源

    bash 复制代码
    # 如果是通过 Apt 安装,会显示包名(如 docker-ce)
    dpkg -l | grep docker
    
    # 如果是通过 Snap 安装,会显示 snap 包
    snap list | grep docker

接下来,请根据你的安装方式选择对应的卸载方法。


第二步:选择正确的卸载方法

方法一:卸载通过 Apt 安装的 Docker(最常见)

如果你是通过 Docker 官方仓库或 Ubuntu 仓库安装的,请使用此方法。

  1. 卸载 Docker 软件包

    使用 apt purge 命令不仅移除软件,还会删除配置文件。

    bash 复制代码
    sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  2. 删除所有 Docker 数据(关键步骤)

    这一步将永久删除所有镜像、容器和卷。如果你确定要清理一切,请执行:

    bash 复制代码
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    • /var/lib/docker 是 Docker 默认存储所有数据的核心目录。
  3. 清理残留配置(可选)

    删除 Docker 的 Apt 源列表文件,并自动移除不再需要的依赖包。

    bash 复制代码
    # 删除源列表(如果存在)
    sudo rm /etc/apt/sources.list.d/docker.list
    
    # 清理残留依赖
    sudo apt autoremove
方法二:卸载通过 Snap 安装的 Docker

如果你的安装命令包含 snap,那么卸载非常简单,一条命令即可搞定。Snap 会自动处理所有相关文件和依赖。

bash 复制代码
sudo snap remove docker
方法三:卸载使用官方脚本安装的 Docker

如果你曾经运行过 Docker 官方的便捷安装脚本(get-docker.sh),则需要手动卸载,步骤类似方法一:

  1. 删除二进制文件 :脚本安装的文件通常在 /usr/bin/ 目录下。

    bash 复制代码
    sudo rm -f /usr/bin/docker /usr/bin/dockerd /usr/bin/containerd /usr/bin/ctr ...
  2. 删除数据目录 :同方法一,删除 /var/lib/docker/var/lib/containerd

  3. 删除系统服务文件

    bash 复制代码
    sudo rm -f /lib/systemd/system/docker.service
    sudo rm -f /lib/systemd/system/containerd.service
    sudo systemctl daemon-reload  # 重新加载 systemd 配置

第三步:验证卸载是否成功

执行完卸载步骤后,最好验证一下是否已完全清除。

  1. 检查 Docker 命令:如果卸载成功,终端会提示"未找到命令"。

    bash 复制代码
    docker --version
    # 输出示例:Command 'docker' not found...
  2. 检查服务状态:系统应该不再识别 Docker 服务。

    bash 复制代码
    systemctl status docker
    # 输出示例:Unit docker.service could not be found.
  3. 检查数据目录:确认数据目录已被删除。

    bash 复制代码
    ls /var/lib/ | grep docker
    # 如果没有任何输出,说明目录已成功删除

总结

为了让你一目了然,整个卸载过程的精髓可以总结为以下流程图,它清晰地展示了不同安装方式对应的卸载路径:
Apt安装 Snap安装 官方脚本安装 开始卸载Ubuntu Docker 确定安装方式 卸载软件包
sudo apt purge ... 删除数据目录
sudo rm -rf /var/lib/docker 验证卸载结果 一条命令卸载
sudo snap remove docker 手动删除二进制文件
与数据目录 卸载完成

希望这篇指南能帮助你干净利落地完成 Docker 的卸载,为后续的操作扫清障碍。如果你在操作过程中遇到任何问题,欢迎在评论区留言讨论!

相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
雪可问春风1 天前
docker环境部署
运维·docker·容器
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
双份浓缩馥芮白1 天前
【Docker】Linux 迁移 docker 目录(软链接)
linux·docker
黄昏晓x1 天前
Linux ---- UDP和TCP
linux·tcp/ip·udp
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
2401_892070981 天前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全