不可变镜像指构建后内容不可更改,更新需重新构建新版本。通过选用安全基底镜像、固化依赖、唯一标识、安全扫描和非root运行等措施,实现部署一致性、可追溯性和安全性提升。

云原生环境中,不可变镜像是指镜像一旦构建完成,其内容就不再改变。任何更新都应通过重新构建并发布新版本镜像来实现,而不是在运行时修改。这种做法提升了部署一致性、安全性和可追溯性。构建不可变镜像的关键在于标准化流程和严格控制变更。
选择合适的基底镜像
基底镜像是构建不可变性的第一步。应优先选择轻量、安全且维护良好的官方镜像,例如 Alpine Linux 或 distroless 镜像。
- 使用最小化操作系统减少攻击面
- 固定基础镜像的版本标签(如 alpine:3.18 而非 latest)
- 定期审查基础镜像的安全漏洞并纳入 CI 流程
在构建阶段固化所有依赖
不可变镜像要求所有应用代码、配置和依赖都在构建时确定,不允许在运行时动态添加或更改。
- 将应用打包为静态产物(如 JAR、二进制文件)并 COPY 进镜像
- 使用 COPY 而非挂载外部配置,在构建时注入环境特定配置(可通过模板或构建参数)
- 利用多阶段构建减少最终镜像体积并隔离构建环境
赋予镜像唯一标识与版本控制
每个镜像必须有唯一、可追溯的标签,便于回滚和审计。
- 使用 Git 提交哈希、时间戳或语义化版本作为镜像标签(如 v1.2.0-abc123)
- 避免使用 :latest 标签用于生产部署
- 在 CI/CD 流水线中自动打标并推送到私有镜像仓库
强化镜像安全性与完整性
确保镜像从构建到运行始终可信。
- 启用内容信任(Docker Content Trust)签名镜像
- 扫描镜像漏洞(如 Trivy、Clair)并设置阻断策略
- 以非 root 用户运行容器,限制权限
- 使用只读文件系统启动容器(readonly rootfs)防止运行时篡改
基本上就这些。不可变镜像的核心是“构建即成品”,杜绝运行时变更。通过标准化构建流程、版本管理和安全控制,可以在云原生平台中实现稳定、可复制的部署体验。










