首页/云/云与容器速查/docker history 查看镜像分层
容器与 Docker106 条

docker history 查看镜像分层

展示镜像每一层的创建命令与大小:定位『镜像为什么这么大』、确认敏感文件是否残留在历史层;配合 --no-trunc 看完整命令。

云与容器速查云更新于 2026-10-13

查看镜像分层

docker history 展示镜像每一层的创建命令与占用大小,是回答「镜像为什么这么大」和「敏感文件有没有残留在历史层」的第一手证据。默认输出会截断创建命令,加 --no-trunc 才能看到完整内容;配合 --format 可以只取关心的字段,便于脚本筛选与留档。

基本信息

输出字段IMAGE、CREATED BY、SIZE、COMMENT
用途一定位体积大头:哪条 RUN 或 COPY 产生了大层
用途二审计历史层中是否残留凭据、证书或临时文件
关键语义历史层中删除的文件仍占空间,除非删除与创建在同一层
常用选项--no-trunc 显示完整命令;--format 自定义输出
配合命令docker image inspect 查看总大小与层信息

典型使用场景

  • 镜像体积优化:找出究竟是哪一层贡献了主要占用
  • 安全审计:确认构建过程中是否把密钥或配置文件写进了层
  • 排查缓存失效:确认哪一层发生变化导致后续层全部重建
  • 交付前检查构建过程是否符合规范(基础镜像、依赖来源、清理动作)
  • 版本对比:看两个版本的层差异,判断变更范围是否符合预期

使用示例

使用示例
docker history myapp:1.0.0
docker history --no-trunc myapp:1.0.0 | head -n 20        # 看完整创建命令
docker history --format '{{.Size}}\t{{.CreatedBy}}' myapp:1.0.0 | head -n 10
docker image inspect myapp:1.0.0 --format '{{.Size}}'      # 镜像总大小(字节)
docker history --no-trunc myapp:1.0.0 | grep -i -E 'secret|token|password|key'  # 审计残留

输出逐列读法

列含义异常表现
IMAGE层 ID,顶层常显示为 missing大量 missing 属正常现象,不影响镜像运行
CREATED BY生成该层的命令出现大文件 COPY 或 ADD 即为体积来源
SIZE该层的新增占用某层明显远大于其他层时重点检查
CREATED创建时间基础层时间陈旧说明基础镜像长期未更新
COMMENT构建系统注释,通常为空出现异常注释说明构建流程被改动过
镜像瘦身优先看 history 找大层:常见大头是依赖包缓存、临时下载物与未清理的 apt/yum 缓存。要真正减小体积,必须把清理动作与安装动作放在同一条 RUN 里,否则文件仍留在上一层。
镜像历史层可以被还原:即使后续层删除了文件,只要文件在某层写入过,就能从该层提取出来。密钥一旦进入任何一层,应对方式是重建镜像并轮换密钥,补一条删除命令并不能消除泄露。

易错点

  • 以为删了文件体积就变小:文件仍留在历史层,必须在同一层内完成删除
  • 把带密钥的层推到公共仓库:历史层可被还原,凭据等同于公开,且必须轮换
  • 只用默认输出做审计:创建命令被截断,看不出完整步骤,敏感操作容易被漏掉
  • 只盯体积不看构建规范:把 RUN 拆得过细导致层数增多、缓存命中下降,镜像反而更慢

数据来源与参考

  • Docker Docs:docker history

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌