前阵子有个老同事联系我,说手上还有好几台 CentOS 7 的服务器在跑业务,最近要在这批机器上部署 Docker 环境,结果照着网上乱七八糟的教程试了好几遍,不是 yum 源报错就是 Docker 启动失败。他问我:CentOS 7 不是已经停止维护了吗?为什么还有这么多人用?到底怎么装 Docker 才不踩坑?
这问题我太有感触了。我自己的生产环境里,CentOS 7 的存量机器占了相当比例,原因其实很简单:业务跑得好好的,没必要为了追新系统去动底层;再加上不少老项目的部署文档、脚本都是基于 CentOS 7 写的,迁移成本不小。所以“CentOS 7 安装 Docker”这个需求,短期内不会消失,而且会一直有人问。
这篇博文,我就把自己在 CentOS 7 上装 Docker 的完整过程、选型思路、遇到的坑和解决方案一次性讲清楚,保证你照着做就能把环境跑起来。
1. 为什么还在给 CentOS 7 装 Docker:先看清环境再动手
1.1 CentOS 7 的现状与 Docker 兼容性判断
很多人上来就问“CentOS 7 能不能装 Docker”,其实这个问题应该拆成两层看:第一层是 Docker 官方还支不支持 CentOS 7,第二层是你那台机器的实际状态能不能跑起来。
从官方支持角度说,Docker Engine 在 CentOS 7 上是长期支持的安装目标,官方仓库里依然保留着 docker-ce 的 RPM 包,安装源、依赖关系都维护得好好的。虽然 CentOS 7 本身进入了维护尾声,但 Docker 官方并没有把 CentOS 7 从支持列表里踢出去,至少在主流版本上仍然可用。
从实际运行角度说,Docker 依赖 Linux 内核特性,比如 cgroups、namespaces、网络桥接等。CentOS 7 默认内核是 3.10 系列,这个内核版本跑 Docker 是没问题的,关键是别乱升级内核、别乱改内核参数。我见过有人为了“性能更好”跑去编译新版内核,结果 Docker 存储驱动和网络模块反而不兼容了,折腾半天又退回原版内核。
1.2 安装前必须确认的三件事
在按任何教程操作之前,我建议你先花三分钟把这些检查做完,可以帮你后面少踩很多坑。
检查系统版本,确认你真的在 CentOS 7 上,而不是 CentOS 8 或者 Stream,因为不同大版本的 yum 源和包管理逻辑不一样:
bash复制cat /etc/redhat-release
检查内核版本,确保满足 Docker 的最低要求。CentOS 7 默认的 3.10 内核可以跑,但如果你用的是老得离谱的 2.6 内核,那还是先升级系统吧:
bash复制uname -r
检查网络连通性,这一步最容易被忽略。Docker 安装过程中需要从 yum 源拉取软件包,如果服务器在内网、没有外网权限,或者 yum 源没有事先配好,安装过程会卡在依赖解析那一步,报一堆 Cannot retrieve metalink for repository 之类的错误:
bash复制yum makecache fast
这一步的意义不仅仅是检查网络,还会把 yum 缓存刷新一遍,避免安装时因为缓存过期导致找不到软件包。如果你是在内网环境,需要提前把 docker-ce 的 RPM 包下载好,做成离线源或者直接用 rpm -ivh 安装,这块内容比较多,后面专门说。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装方案选型:最容易翻车的两个岔路口
2.1 官方 yum 源 vs 国内镜像源
CentOS 7 安装 Docker 的第一步是配置 yum 源,这一步看着简单,却是翻车重灾区。你可能会想,直接用 Docker 官方源不就行了?理论上没问题,实际操作中你会发现服务器拉取速度极其感人,尤其在网络环境不理想的情况下,一个 docker-ce 的 metadata 就要下载半天,更别说后面还要拉 containerd、docker-ce-cli 这些依赖包。
我个人的建议是,直接使用国内镜像源。以阿里云镜像站为例,配置方式如下:
bash复制yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这里要说明两点。第一,yum-utils 提供 yum-config-manager 命令,是用来把 repo 文件写到 /etc/yum.repos.d/ 目录下的工具;`device-mapper-persi
