核心是聚焦最小化基础、非root运行、敏感信息隔离、构建过程可审计四要素:选用明确版本的slim/alpine镜像,创建UID1001非root用户并切换,用.dockeringore排除敏感文件,启用BuildKit并固定构建上下文。

直接用 Dockerfile 构建符合安全十二要素的生产底座镜像,核心不是堆砌所有要素,而是聚焦最关键的四条:最小化基础、非 root 运行、敏感信息隔离、构建过程可审计。其他要素(如健康检查、日志外送等)属于应用层增强,底座本身只需提供能力支撑,不强制实现。
选对基础镜像,从源头控体积与漏洞
底座镜像必须使用明确版本号的 slim 或 alpine 系统镜像,禁用 latest 标签。例如:
-
FROM registry.cn-hangzhou.aliyuncs.com/acs/ubuntu:22.04-slim(国内源加速) - 避免
FROM ubuntu:latest或FROM node:18这类隐式依赖,防止基础层意外升级引入 CVE。 - 构建前用
trivy image --severity CRITICAL ubuntu:22.04-slim扫描基础镜像,确认无高危漏洞。
强制非 root 用户 + 显式权限控制
生产底座不允许以 root 身份启动容器进程。在 Dockerfile 中写死用户创建逻辑:
RUN groupadd -r appgroup && useradd -r -u 1001 -g appgroup appuser-
USER appuser必须放在所有RUN指令之后、CMD之前 - 配合
WORKDIR /app后加RUN chown -R appuser:appgroup /app,确保工作目录归属清晰
用 .dockerignore 切断敏感泄露路径
构建上下文是底座镜像最易被忽视的风险入口。必须配置完整 .dockerignore 文件:
- 排除开发痕迹:
.git、.env、.vscode、*.log - 排除依赖缓存:
node_modules/、__pycache__/、.m2/ - 排除本地密钥:
id_rsa、secrets.yaml、credentials.json - 不写
**通配符,避免误排除关键文件
构建命令启用 BuildKit 并固定上下文
标准 docker build 默认不开启缓存优化和安全校验。生产底座构建必须显式启用:
- 设置环境变量:
export DOCKER_BUILDKIT=1 - 执行构建:
docker build --progress=plain -t my-base:202605 -f Dockerfile.base . -
--progress=plain确保每步输出可被 CI 日志捕获,满足审计要求 - 构建上下文始终为当前目录(
.),禁止使用/或~,防止意外打包宿主机文件


















