标准答案
- 使用多阶段构建,把编译工具与最终运行镜像分开,最终镜像只保留运行所需的二进制、依赖和最小系统组件。
- 基础镜像和应用镜像都使用固定版本或摘要,并记录源码提交、构建时间和制品校验信息。
- 在构建流程中扫描基础层、系统包和应用依赖,发现高风险漏洞时阻止或明确豁免。
- 部署引用不可变镜像摘要或明确版本,回滚时能精确回到已验证过的同一制品。
题目解析
镜像越大,拉取、启动和攻击面通常越大;但“最小”不等于删到无法排查。生产调试工具可以通过受控临时容器或独立诊断镜像提供。
latest 的问题不是名字,而是可变性。同一个部署定义在不同时间可能拉到不同内容,这会破坏审计、复现和回滚。
常见误区
- 把编译缓存、源码和私钥都打进运行镜像。
- 只扫描应用依赖,不扫描基础镜像和系统包。
- 用 latest 部署生产,故障后无法确认实际运行了什么版本。