云原生环境中,不可变镜像是指镜像一旦构建完成,其内容就不再改变。任何更新都应通过重新构建并发布新版本镜像来实现,而不是在运行时修改。这种做法提升了部署一致性、安全性和可追溯性。构建不可变镜像的关键在于标准化流程和严格控制变更。
选择合适的基底镜像
基底镜像是构建不可变性的第一步。应优先选择轻量、安全且维护良好的官方镜像,例如 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)防止运行时篡改基本上就这些。不可变镜像的核心是“构建即成品”,杜绝运行时变更。通过标准化构建流程、版本管理和安全控制,可以在云原生平台中实现稳定、可复制的部署体验。
