1.需求

我们在使用docker的时候可能会遇到这样的场景,我们使用Dockerfile创建了一个镜像,然后当我们想把Dockerfile拿出来修改一下或者是复制一下的时候,却找不到了,我们不能再重新写吧,这时候我们可以通过已有的镜像来获得Dockerfile,下面我们就将实现方案说下。

2. 使用docker history

我们可以docker 自己带的命令docker history来通过查看分层的方式尝试确定更改过的地方。

docker history 镜像

我们先看下这个命令的使用
在这里插入图片描述
我们看到这个命令有几个参数,其中–no-trunc 这个命令表示不截断输出。
我们执行一个看看nignx镜像
在这里插入图片描述
使用–no-trunc 这个参数就可以看到全貌了
我们可以参考别人写的一个过滤命令来获得:
命令一:

 docker history --format {{.CreatedBy}} --no-trunc=true 镜像 |sed "s?/bin/sh\ -c\ \#(nop)\ ??g"|sed "s?/bin/sh\ -c?RUN?g" | tac

在这里插入图片描述
命令二:
注意:使用这个命令前需要安装jq 这个软件,直接使用yum就可以安装

docker history 镜像 | awk '{print $1}' | grep -v IMAGE | grep -v missing | tac | sed "s/\(.*\)/docker inspect \1 | \
jq -r \'.[0].ContainerConfig.Cmd[2] | tostring\'/" | sh | sed 's/^#(nop) //'

3.使用容器化解决方案

这种方式其实就是用别人的搞的镜像以容器化的方式来帮你逆向dockerfile。

docker run -v /var/run/docker.sock:/var/run/docker.sock centurylink/dockerfile-from-image 镜像

该解决方案参考书籍《docker实践》

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐