from 指令是 dockerfile 的起点,定义基础镜像并决定信任边界、安全策略与生命周期管理;应优先选用带明确标签的 lts 版本,避免 :latest,结合多阶段构建、可观测机制、私有 registry 与签名验证实现可控交付。

FROM 指令是 Dockerfile 的起点,决定了基础镜像和后续所有层的根基;它直接绑定镜像的生命周期——从构建、更新到安全维护,都绕不开对 FROM 行的审慎选择与持续管理。
FROM 不只是“选个底座”,而是定义信任边界
基础镜像决定了操作系统版本、预装工具、默认用户、安全补丁状态等关键属性。使用 FROM ubuntu:22.04 意味着你继承了该 Ubuntu 发行版的整个生命周期策略:官方支持周期(至 2027 年)、CVE 修复节奏、APT 源配置等。若换成 FROM ubuntu:latest,则可能在某次重建时意外拉取到不兼容的新版系统,导致构建失败或运行时异常。
- 优先使用带明确标签的长期支持(LTS)版本,如
debian:12-slim、python:3.11-slim-bookworm - 避免
:latest,它不可重现,也不利于审计和回滚 - 考虑镜像来源可信度:官方镜像(Docker Hub 标有 “Official Image”)通常比社区或个人上传的更可靠
多阶段构建中,FROM 可多次出现,但每个阶段独立生命周期
多阶段构建允许你在不同阶段使用不同基础镜像,例如用 golang:1.22 编译代码,再用 alpine:3.20 运行二进制。此时每个 FROM 都开启一个新构建上下文,彼此隔离。
- 编译阶段的镜像只需满足构建需求,无需最小化,但应固定版本以保证可复现
- 运行阶段的镜像应尽可能精简(如
-slim或-alpine),并定期同步基础层更新 - 可通过
ARG BUILDKIT=1和--build-arg动态传入基础镜像标签,便于统一升级
镜像更新不能只靠重构建,要建立 FROM 声明的可观测与自动化机制
基础镜像更新(如 OpenSSL 修复)不会自动传播到你的镜像。若未重新构建,旧镜像仍含已知漏洞。因此需将 FROM 行纳入 CI/CD 的依赖管理范畴。
- 用工具扫描 Dockerfile 中的 FROM 行,识别过期或 EOL(End-of-Life)镜像,如 dockerfile-tools 或 Trivy 的
--scan-all模式 - 在 CI 中加入检查步骤:对比当前使用的镜像标签是否仍在上游维护期内(例如通过 endoflife.date API)
- 设置自动化 PR:当检测到新标签可用(如
node:20.15.0发布),自动提交更新 FROM 行的 Pull Request
私有 Registry 和镜像代理让 FROM 管控更可控
直接拉取公网镜像存在网络不稳定、被限速、甚至被污染风险。企业级实践中,应将基础镜像统一缓存、签名验证并打标管理。
- 部署 Harbor 或 Nexus Repository,配置上游代理(如 docker.io、ghcr.io),所有 FROM 拉取走内部代理
- 为关键基础镜像创建命名空间级别策略,例如
base/ubuntu:22.04由安全团队审核后同步,禁止开发直接引用原始镜像 - 结合 Cosign 或 Notary 对基础镜像签名,在 Docker build 时启用
--attest=type=cosign验证来源完整性
FROM 是 Docker 构建链的第一环,它的稳定性、可追溯性和可维护性,决定了整个镜像资产能否长期可信交付。把 FROM 当作一个需要版本控制、安全审计和流程约束的依赖项来管理,而不是一句静态声明。










