【1】日常开发中,我们可以根据记录找到历史的docker镜像并进行操作,这个docker帮我们保存了,但是并没有一个好的方式去查看和保存构建者的Dockerfile文件内容。
【2】知其然知其所以然;程序员都是有好奇心的,尤其对于docker这种新的技术,当我们去运行别人的镜像容器时,出于好奇心我想知道别人是如何构建,构建过程是什么,学习了解。
【3】优化镜像;我们知道镜像是分层构建,如果我们想要优化一个镜像的大小和安全性,那么就需要去逐层解析和处理,这个就需要知道构建过程也就是Dockerfile是什么样的。
【4】排查问题;当我们去使用别人提供的镜像时,因为不了解它的构建步骤和流程,那么可能缺少了一个组件,少配置了一个环境变量,那么在排查问题的时候就需要查看Dockfile分析排查问题了。
FROM ubuntu:latest
LABEL maintainer="example@gmail.com"
RUN apt-get update && apt-get upgrade -y
RUN apt-get install nginx -y
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
上面的本次准备的一个测试的Dockerfile文件,构建命令如下
docker build -t simple-nginx .
【语法】
docker history [OPTIONS] IMAGE


docker history是docker自带的命令工具,一般情况下它可以满足我们查看构建过程的需求,但是有一些不足,它的整个展示的结果是逆序的和我们的Dockerfile是相反的,这意味着我们需要从下往上看,尤其命令比较长的话不是很友好。还有它删除了RUN命令,仅仅可以看到RUN命令后面的内容。如果我们想要去编辑这个Dockerfile内容也是不好操作的。
alpine/dfimage是一个镜像,是由Whaler 工具构建而来的。主要功能有:
【1】从一个docker镜像生成Dockerfile内容
【2】搜索添加的文件名以查找潜在的秘密文件
【3】提取Docker ADD/COPY指令添加的文件
【4】展示暴露的端口、环境变量信息等等。
它将自动提取目标docker镜像。参数-sV=1.36并不总是必需的。
$ alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
$ dfimage -sV=1.36 nginx:latest
示例:分析上面示例构建simple-nginx镜像,并写入一个临时文件中,非常的简单
dfimage simple-nginx > demo.text
以下就是输出的结果内容

如果想要更加详细的内容,比如每一层的信息,以及每一层对应的文件增减情况,那么dive工具可以帮助我们更好的分析镜像。
dive用于探索docker镜像、layer内容和发现缩小docker/OCI镜像大小的方法的工具。对于一些优化镜像大小的需求,该工具将非常适用。
【使用方式】
$alias dive="docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive"
$dive nginx:latest
继续分析之前的测试镜像

左边是镜像和layer的信息,右边是当前选中镜像layer对应的文件磁盘文件信息,右边是会根据左边的选择变动的,比如我在某一层进行了文件的复制新增或者删除,右边会以不同的颜色进行展示的,具体展示如下:
green - 新增的文件
yellow - 编辑的文件
red - 删除的文件

在该启动状态下,我们可以通过tab键和上下键切换选择镜像层以及选择左边还是右边的内容,这对于镜像的分析非常有用。