docker history 是查看镜像构建过程最直接、最常用的命令,它将镜像拆解为逐层构建记录,显示每层的 IMAGE ID、CREATED、CREATED BY、SIZE 和 COMMENT 五列信息,从下往上对应基础镜像到顶层指令;通过 --no-trunc 查看完整命令,--format 定制输出字段,--filter "size>0" 排除空层,--filter "size>10MB" 快速定位臃肿层,结合 docker inspect 可补全元数据信息。

docker history 是查看镜像构建过程最直接、最常用的命令,它把镜像“拆开”成一层层的构建记录,帮你看清每一层是怎么来的、用了什么命令、占多大空间。
核心就一条命令:
docker history <镜像名[:标签]>
比如:
docker history nginx:latest
输出默认包含五列:IMAGE ID、CREATED、CREATED BY、SIZE、COMMENT。从下往上读——最底层是基础镜像(如 alpine 或 ubuntu),最顶层是你最后加的指令(比如 CMD 或 ENTRYPOINT)。
查看完整指令,避免被截断
有些 RUN 命令很长(比如一长串 apt-get install),默认会显示为 /bin/sh -c ... 并省略后半部分。加 --no-trunc 就能看见全部:
docker history --no-trunc nginx:latest
只关注关键信息,用 --format 定制输出
适合排查或写脚本。常用字段有 .ID、.CreatedBy、.Size、.CreatedSince。例如:
docker history --format "{{.ID}}: {{.CreatedBy}} → {{.Size}}" --no-trunc nginx:latest输出类似:
sha256:abc123...: /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon off;"] → 0B sha256:def456...: /bin/sh -c nginx -V 2>&1 | head -1 → 2.1MB ...
过滤掉“没实际改动”的空层
ENV、LABEL、ARG 这类指令不改文件系统,但也会生成一层(SIZE 显示为 0B)。用 --filter "size>0" 跳过它们,聚焦真正有体积变化的操作:
docker history --filter "size>0" nginx:latest
快速定位大体积层,辅助优化
镜像臃肿往往来自某一层:比如 RUN apt-get install 没清理缓存。你可以结合 --format 和 --filter 找出大于 10MB 的层:
docker history --filter "size>10MB" --format "{{.CreatedBy}} ({{.Size}})" nginx:latest如果看到类似 /bin/sh -c apt-get update && apt-get install -y python3 占了 150MB,就知道该用 && rm -rf /var/lib/apt/lists/* 清理了。
补充:配合 docker inspect 看元数据
history 展示“怎么做”,inspect 展示“谁做的、什么时候做的、怎么配置的”。比如查构建时间或作者:
docker inspect -f '{{.Created}} {{.Author}}' nginx:latest不复杂但容易忽略细节——关键是按需组合参数,而不是只靠默认输出。


















