基础镜像选择与维护是什么
基础镜像(base image)是每个容器镜像的底座,它的漏洞会传导到所有上层镜像:底座不维护,上层再多加固也白费。三个决策点:来源(官方镜像、发行版镜像、distroless、内部基线镜像)、固定粒度(精确版本 tag 或 digest)、更新通道(用机器人订阅上游更新,重跑构建与扫描)。内部基线镜像把时区、证书、非 root 用户等加固预置好,上层项目继承即可,减少每个项目重复配置。
基本信息
| 来源 | 官方镜像、发行版镜像、distroless、内部基线镜像 |
|---|---|
| 固定 | node:20.11.1-slim 比 node:latest 可复现;更严可固定 digest |
| 更新 | 用机器人订阅基础镜像更新,重跑构建与扫描 |
| 权衡 | slim/alpine 体积小,但 musl 与 glibc 差异、工具缺失要评估 |
典型使用场景
- 多项目统一基线:全部服务继承内部基线镜像,加固一次、全员受益。
- 漏洞治理:底座升级一轮,所有上层镜像重建后同步受益。
- 可复现构建:固定精确版本或 digest,构建结果不随上游 tag 漂移。
- 离线环境:内部镜像仓库统一同步所需底座,断网也能构建。
- 语言运行时升级:由平台团队统一推进基础镜像版本,替代各项目各自为战。
固定版本示例
固定版本示例
FROM node:20.11.1-bookworm-slim
# 需要完全可复现时固定 digest:
# FROM node@sha256:<digest>
# 内部基线继承:
# FROM registry.example.com/base/node20-hardened:1.4.2底座类型对比
| 类型 | 特点 | 适用 |
|---|---|---|
| 官方镜像 | 维护活跃、体积中等 | 通用场景 |
| slim 变体 | 精简但保留包管理 | 多数服务 |
| alpine | 体积最小,musl 生态有差异 | 静态编译、小工具 |
| distroless | 无 shell、攻击面小,排障手段少 | 生产运行 |
| 内部基线 | 预置加固与合规配置 | 企业统一管理 |
内部基线镜像统一加固(时区、证书、非 root 用户),上层项目继承减少重复配置;加固项变更时平台侧集中发布。
固定 digest 不是「一劳永逸」:更新需要显式改 digest,靠机器人或批处理推动,配合定期重建让补丁持续进入。