镜像越堆越多,漏洞越修越慌:长期产品线,镜像真得“管”起来了
干运维这些年,我见过太多“看着没事,实际要命”的场景,其中容器镜像管理绝对排得上前三。
你要是问我一个问题:
👉 长期跑的产品线,最容易被忽略、但最容易出事故的是什么?
我不会说 Kubernetes,也不会说 CI/CD,
我会直接告诉你四个字:
镜像垃圾。
对,就是那些:
- 早就不用了,但还在仓库里躺着的
- tag 起得像谜语一样的
- 基础镜像三年没动过的
- 漏洞扫描一片红,但“先别动”的
今天这篇文章,我就想和你聊一件很现实的事:
镜像不是构建完就完事了,而是要“养老送终”的。
一、先戳破一个幻觉:镜像不是一次性交付品
很多团队对镜像的认知,停留在这一步:
“CI 构建成功 → push → 部署完事”
但在长期产品线里,镜像更像是:
一种持续背锅的资产
为什么这么说?
- 产品活 3~5 年
- 镜像活得比代码还久
- 基础镜像漏洞在不断爆
- 安全审计从来不看你当初“写得多辛苦”
镜像一旦进仓库,就会开始慢慢“腐烂”。
二、镜像垃圾,通常是怎么堆出来的?
我给你列几个我亲眼见过的真实情况,你看看眼不眼熟。
1️⃣ Tag 完全没有治理
myapp:latest
myapp:test
myapp:test2
myapp:fix-bug
myapp:fix-bug-final
myapp:fix-bug-final-v2
问题不是“名字难看”,
问题是:
- 没人知道哪个在跑
- 没人敢删
- 最后一个都不敢动
镜像一多,勇气就没了。
2️⃣ 分支一多,镜像指数级膨胀
- feature 分支
- hotfix 分支
- 临时验证分支
每个都构建镜像,每个都 push,
结果就是:
仓库像个“镜像坟场”。
3️⃣ 基础镜像多年不升级
FROM centos:7
这一行代码,
我敢说已经毁掉了无数企业的安全评估。
不是你写错了,
是 时间变了,漏洞多了。
三、镜像垃圾最可怕的地方:它会掩盖真正的风险
很多团队做漏洞扫描的时候,会遇到一个现象:
“扫描结果一片红,根本不知道该修哪个”
这不是工具不行,
而是垃圾太多,噪声太大。
举个现实的例子
- 仓库里 2000 个镜像
- 真正在跑的:200
- 高危漏洞:1500 个镜像命中
这时候你告诉安全团队:
“我们会慢慢修”
对方只会觉得你在敷衍。
四、长期产品线,镜像治理的核心不是“多”,而是“清楚”
我一直强调一句话:
镜像治理的目标,不是零漏洞,而是可控。
那什么叫“可控”?
我给你一个运维视角的定义:
- 哪些镜像在跑:清楚
- 哪些镜像可删:明确
- 哪些漏洞必须修:有分级
- 哪些基础镜像在兜底:统一
五、第一步:把“谁在用”这件事搞清楚
这是所有治理的前提。
你至少要能回答这三个问题:
- 这个镜像有没有在跑?
- 跑在哪个环境?
- 最后一次部署是什么时候?
一个非常实用的做法
通过集群反查镜像使用情况:
kubectl get pods -A -o jsonpath='{..image}' | tr -s '[[:space:]]' '\n' | sort | uniq
然后和仓库里的镜像做对比。
你会第一次直观感受到:
原来我仓库里,大半是“尸体”。
六、第二步:给镜像一个“生命周期”
镜像也该有生老病死。
一个我用得很舒服的策略
短期 tag:
- PR / feature
- 自动过期(7~14 天)
发布 tag:
- 语义化版本
- 和代码版本绑定
长期基线镜像:
- LTS
- 有专人维护
CI 里可以直接加“过期标签”
docker build \
--label expire_at=$(date -d "+14 days" +%s) \
-t myapp:pr-123 .
后面清理脚本按 label 批量删。
七、第三步:漏洞不是不修,是要“分层修”
我个人非常反对一句话:
“漏洞太多了,修不过来”
这是典型的管理失败,不是技术失败。
正确的漏洞分层思路
1️⃣ 只盯“在跑”的镜像
- 运行中镜像:高优先级
- 仓库垃圾:直接删
2️⃣ 优先修基础镜像
FROM ubuntu:22.04
基础镜像一升级,
80% 的 CVE 会自动消失。
3️⃣ 接受“非运行漏洞”
不是所有漏洞都值得你通宵修。
- 不可达路径
- 未安装组件
- 非 root 环境
运维要学会对风险负责,而不是对数字负责。
八、长期产品线,最重要的是“统一底座”
我见过最稳的产品线,基本都有一个特点:
公司级基础镜像
- 统一 OS
- 统一安全补丁节奏
- 统一扫描策略
FROM company-base:ubuntu22-runtime
这样做的好处只有一个字:
稳
漏洞修一次,全线收益。
九、说点掏心窝子的感受
干运维干久了,你会慢慢意识到一件事:
真正拖垮团队的,不是事故,而是历史包袱。
镜像垃圾就是那种:
- 平时不疼
- 出事要命
- 又没人敢碰的东西
但你只要肯花一段时间,把:
- 用的留下
- 不用的删掉
- 基础的统一
- 风险的分级
你会发现,后面的日子会轻松很多。
写在最后
如果你现在的产品线已经:
- 镜像一堆
- 漏洞一片
- 安全一催就心虚