1. 装Docker之前,先把环境里的“旧版本”清干净
最近在帮一台 Ubuntu 22.04 的机器配置 Docker,顺手把国内镜像加速也做了。这台机器是半路接手的,里面曾经装过 Ubuntu 自带源里的 docker.io,后来卸载得又不干净,导致我这次配置时踩了好几个隐藏的坑。这篇笔记按我实际操作顺序来写:为什么先清理环境、怎么安装 Docker、如何配置国内镜像加速、如何验证加速真的生效,以及几个最容易让 Docker “罢工”的故障现场。
如果你刚接触 Linux,或者之前只在 Windows/Mac 上用过 Docker Desktop,这篇笔记可以直接照抄;如果你已经装过 Docker 但拉镜像一直很慢,重点看第 4 章的 daemon.json 配置和第 5 章的验证方法。
先说一个反直觉的事:在 Ubuntu 22.04 上,直接执行 sudo apt install docker.io 表面上看最省事,实际后患很大。Ubuntu 仓库里的 docker.io 版本通常落后 Docker 官方版本好几个大版本,而且它自带的 containerd、runc 等组件版本也偏旧。如果你只是跑一两个简单容器,可能感觉不到差异;但一旦用到 Docker Compose 新语法、BuildKit 新特性,或者需要和 CI/CD 平台对齐版本,旧版本的兼容性问题就会接二连三地冒出来。
更麻烦的是,如果机器上之前用 apt 装过 docker.io,再切到 Docker 官方源安装时,两个包可能会产生文件冲突。旧版残留的 /etc/default/docker、/var/lib/docker 里的老数据,也会让新版 Docker 启动时一脸茫然。所以我的建议永远是:不要急着执行安装命令,先花两分钟确认机器当前状态。
清理命令如下:
bash复制# 查看是否已安装过 Docker 相关包
dpkg -l | grep -i docker
# 如果有输出,先卸载:docker.io / docker-ce / docker-engine 等等
sudo apt remove --purge docker.io docker-ce docker-ce-cli containerd runc -y
注意,这里 --purge 会把软件的配置文件也删掉。第一次执行时可能会提示某些包不存在,这很正常,因为每台机器装过的版本组合不一样。删完包之后,还需要手动清理几个残留目录:
bash复制sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
sudo rm -rf /etc/apt/sources.list.d/docker.list
sudo rm -rf /usr/share/keyrings/docker-archive-keyring.gpg
这里我必须加一句重要提醒:如果你之前用 Docker 跑过数据库这类有持久化数据的容器,别急着 rm -rf /var/lib/docker。这个目录里保存着所有容器、镜像、数据卷,一旦删除就彻底找不回来了。正确做法是先 sudo docker ps -a 查看现有容器,把需要保留的数据用 docker cp 拷贝出来,或者直接备份整个 /var/lib/docker 目录到移动硬盘。我见过不止一次“因为清理残留把数据库一起带走”的事故,宁可多花几分钟备份,也别赌手速。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 换好 apt 镜像源再做系统更新:这一步很多人顺序反了
清理完旧版本后,接下来第一步其实是确认 Ubuntu 22.04 的 apt 源本身可用。这一步经常被忽略,因为用户总想着“先装 Docker”,结果 apt update 报出一堆“无法连接”或“404 Not Found”的错误,还会反过来怀疑 Docker 源配错了。其实问题出在系统源上。
国内服务器如果还在用 Ubuntu 默认的 archive.ubuntu.com 和 security.ubuntu.com,更新速度通常非常慢,有时候一个 apt update 都要卡好几分钟。所以在配置 Docker 源之前,我会先顺手把系统的 apt 源换成国内镜像。
这里注意一个细节:换源操作只影响后续的 apt update/install/upgrade,不会对 Docker 镜像拉取起任何加速作用。Docker 镜像拉取走的是 Docker Hub 或你配置的 registry mirror,跟 apt 仓库是两条独立通道。很多人以为“系统源换了,Docker 拉镜像也快了”,这是完全错误的理解。
Ubuntu 22.04 的代号是 jammy,所以源的格式长这样,以下以阿里源为例:
bash复制# 先备份原始源配置,这是一个好习惯
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 把 jammy 相关源写入
sudo tee /etc/apt/sources.list > /dev/null <<'EOF'
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
sudo apt update
如果你用的是腾讯云服务器,可以换成 mirrors.cloud.tencent.com;如果是华为云,用 mirrors.huaweicloud.com。域名写成 mirrors.aliyun.com 也能覆盖大部分场景,因为阿里源在国内的连接速度和稳定性都不错。
做完这些之后,顺手安装基础工具,后面会用到:
bash复制sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release apt-transport-https
这里面 ca-certificates 和 gnupg 是为了验证 Docker 官方 GPG Key,curl 用来下载密钥文件,lsb-release 用来获取系统版本代号。不要嫌它们多余,缺了任何一样,后续添加 Docker 源时都会卡在奇怪的报错上。
提示:如果是在新装好的 Ubuntu 22.04 上操作,且网络情况正常,也可以跳过系统源替换这一步直接进入 Docker 安装。但如果
apt update明显很慢,或者 pingarchive.ubuntu.com的延迟高得离谱,就老老实实先换源,否则后面的安装体验会非常难受。
