首页/开发/CI/CD 与发布速查/镜像摘要固定(Digest Pinning)
构建与制品管理58 条

镜像摘要固定(Digest Pinning)

用 image@sha256:… 引用镜像:内容寻址、不受标签重推影响,是「引用即事实」的部署方式。

CI/CD 与发布速查开发更新于 2026-10-13

摘要固定是什么

digest 是镜像内容的 sha256 哈希,image@sha256:… 的引用方式与内容一一对应:标签可以被人重推、指向别的镜像,摘要不会。生产部署用摘要引用,回滚、审计与签名校验都有稳定锚点;缺点是可读性差,需要在发布记录里同时保留版本号。多架构场景注意:manifest 列表入口与各平台子镜像的摘要不同,固定时要确认目标架构对应的那一层。

基本信息

形式registry.example.com/app@sha256:<64 位十六进制>
获取docker inspect --format '{{index .RepoDigests 0}}' 或 push 输出
适用生产部署清单、签名校验、供应链策略
注意digest 按平台架构区分:多架构镜像 list 与各子清单的摘要不同
校验部署前校验摘要可解析:docker buildx imagetools inspect 可查远程摘要

获取摘要的方式

方式场景
docker inspect RepoDigests本地已拉取的镜像
push/CI 输出构建产物流水线记录
buildx imagetools inspect未拉取时查远程摘要

标签与摘要对比

引用方式特性适用
标签 app:1.8.0人类可读、可被重推开发调试、非生产环境
摘要 app@sha256:…内容寻址、不可变生产部署、签名校验、审计

典型使用场景

  • 生产部署清单:Pod 模板用摘要引用,标签重推不影响线上
  • 签名与准入:按摘要校验签名,防同标签不同内容
  • 审计留痕:发布记录存档摘要,事后可证明线上内容
  • 多架构分发:按具体平台摘要引用,避免不同架构节点拉到不同镜像
  • 回滚:按已知摘要部署,不再依赖标签解析
  • 基线核对:把线上摘要与发布记录定期比对,发现漂移立即告警并排查

Kubernetes 引用

Kubernetes 引用
containers:
  - name: app
    image: registry.example.com/app@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

# 取得摘要并记入发布单
# docker inspect --format '{{index .RepoDigests 0}}' app:1.8.0
摘要固定牺牲可读性:在注释或部署记录里同时写明对应版本号。
CI 里建议由流水线自动把标签解析成摘要并回写清单,人工拼 64 位十六进制容易出错。

易错点

  • 手工拼摘要有笔误风险:从 CI 输出或仓库页面复制,且部署前做存在性校验
  • 只固定镜像不固定其依赖(基础镜像、挂载配置):供应链一致性需要整体看
  • 摘要只写进部署清单不留档:发布记录缺失后回滚无法核对,发布单与清单都要存
  • 把 latest 当摘要用:latest 是标签不是内容,重推后会解析到新镜像
  • 清单里标签与摘要混用:更新时容易漏改某一处,统一全量改为摘要引用
  • 只在开发环境固定摘要:生产仍用标签,回滚可能解析到新内容,策略要覆盖全部部署环境

数据来源与参考

  • OCI Image Spec
  • Kubernetes 文档《Images》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌