docker history 是什么
docker history 按层列出镜像的构建历史,显示每层对应的指令与体积增量,用来确认层来源、定位异常大层、审计镜像里执行过什么。输出顺序是从新到旧,与 Dockerfile 的书写顺序正好相反。
基本信息
| 用途 | 查看镜像层与对应的构建指令 |
|---|---|
| 语法 | docker history [--no-trunc] [--format 模板] 镜像 |
| 显示内容 | 层 ID、创建时间、创建指令、体积大小、注释 |
| 限制 | 没有构建历史的镜像(导入或第三方导出)显示为 missing |
| 相关命令 | docker inspect 看配置,docker image ls 看总大小 |
典型使用场景
- 排查镜像为什么这么大:按大小排序找出异常层
- 审计镜像内容:确认镜像里到底执行过哪些命令
- 安全自查:核对构建参数或口令是否被写进历史
- 瘦身改造前先看清现状,找出可以合并或清理的步骤
- 分析构建缓存为何没按预期复用,结合层信息与构建日志判断
- 做镜像变更说明时列出关键层,方便交接与复盘
示例
示例
docker history app/web:1.0 # 默认会截断长指令
docker history --no-trunc app/web:1.0 # 显示完整指令
docker history --format 'table {{.CreatedBy}}\t{{.Size}}' app/web:1.0
docker history --no-trunc app/web:1.0 | head -n 20 # 只看最近的若干层输出列怎么读
| 列 | 含义 | 观察重点 |
|---|---|---|
| IMAGE | 层 ID | 可疑来源可据此追溯 |
| CREATED BY | 该层对应的构建指令 | 是否残留凭据或调试命令 |
| SIZE | 该层带来的体积增量 | 异常大的层是瘦身切入点 |
| CREATED | 创建时间(相对时间) | 判断镜像新旧 |
| COMMENT | 构建注释 | 通常为空,可忽略 |
必须加 --no-trunc 才能看到完整指令,默认输出会截断长命令,安全自查时漏掉截断部分就可能漏掉问题。
层大小是增量概念,镜像总大小不等于各层简单相加;看总量用 docker image ls,找增量来源用 history。
出现没有构建历史的层(显示为 missing),说明镜像是导入或由其他工具导出的,这类镜像无法用 history 审计构建过程。