既存のDockerイメージを再構築したい
Dockerイメージは取得できるけどDockerfileがないなーという場合に役立つ
Docker historyコマンド
Dockerイメージの履歴を確認するコマンド
この履歴こそがDockerfileで実行されるコマンドに相当する。
Docker Documentation
https://docs.docker.com/engine/reference/commandline/history/
Docker history 実行結果
例として、centos7のDockerイメージの履歴を見てみる
$docker history centos:7 
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
5182e96772bf        2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:6340c690b08865d7e…   200MB 
コマンドが一部省略されてしまう
省略せずに表示してみる
$docker history centos:7 --no-trunc
IMAGE                                                                     CREATED             CREATED BY                                                                                                                                                                                                SIZE                COMMENT
sha256:5182e96772bf11f4b912658e265dfe0db8bd314475443b6434ea708784192892   2 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]                                                                                                                                                                      0B                  
<missing>                                                                 2 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180804   0B                  
<missing>                                                                 2 months ago        /bin/sh -c #(nop) ADD file:6340c690b08865d7eb84a36050a0ab0e8effc2b010a4ccb20b810153a97a9228 in /                                                                                                          200MB  
どうしたらこんなにきたなくひょうじできるんだ...
整形して見やすく表示
formatオプションにより、コマンド部分のみを抽出
$docker history centos:7 --no-trunc --format '{{ json .CreatedBy }}' 
"/bin/sh -c #(nop)  CMD [\"/bin/bash\"]"
"/bin/sh -c #(nop)  LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180804"
"/bin/sh -c #(nop) ADD file:6340c690b08865d7eb84a36050a0ab0e8effc2b010a4ccb20b810153a97a9228 in / "
履歴の新しい方から表示されるためDockerfileとして扱うには逆順にしてあげる必要がある
$docker history centos:7 --no-trunc --format '{{ json .CreatedBy }}' | tail -r
"/bin/sh -c #(nop) ADD file:6340c690b08865d7eb84a36050a0ab0e8effc2b010a4ccb20b810153a97a9228 in / "
"/bin/sh -c #(nop)  LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20180804"
"/bin/sh -c #(nop)  CMD [\"/bin/bash\"]"
まとめ
ADDコマンドなどは、何やらファイルのIDなどを指すように置き換えられているため
そのまま流用できないが、参考にする程度のことはできると思う
ファイルなどもでてきたら嬉しいのだけど...