#既存の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などを指すように置き換えられているため
そのまま流用できないが、参考にする程度のことはできると思う
ファイルなどもでてきたら嬉しいのだけど...