工程效率与质量 / 进阶
更小也更可信的容器镜像:多阶段构建、固定版本与 SBOM
缩小运行镜像、固定基础镜像来源,并生成软件物料清单,让容器既轻量又可审计。
构建环境不该进入运行镜像
编译器、包管理器和源码只在构建阶段需要。多阶段构建把最终产物复制到精简运行阶段,既降低镜像体积,也减少可被攻击的工具和依赖。
EXAMPLE / 01Docker
FROM node:22-bookworm AS build
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build && pnpm prune --prod
FROM node:22-bookworm-slim AS runtime
USER node
WORKDIR /app
COPY --from=build --chown=node:node /app/dist ./dist
COPY --from=build --chown=node:node /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]标签方便阅读,摘要保证可复现
latest 和大版本标签会随时间移动。同一 Dockerfile 在不同日期可能得到不同基础镜像。生产构建应记录并固定镜像 digest,同时由自动化工具定期提出升级变更,让更新经过测试而不是悄悄发生。
原生模块、字体和调试工具在 musl 环境下可能带来额外兼容成本。选择基础镜像时同时考虑体积、漏洞响应和运行兼容性。
为每个发布镜像生成身份材料
CI 应生成 SBOM、执行漏洞扫描,并使用构建身份对镜像签名。部署记录关联源码提交、镜像 digest 和扫描结果。发现高危漏洞时,团队才能快速判断哪些服务和环境受到影响。
运行阶段使用非 root 用户;基础镜像固定 digest;镜像包含 OCI 源码与版本标签;SBOM 和签名随发布产物保存。