Help us understand the problem. What is going on with this article?

Dockerfileを既存のDockerイメージから生成する方法

More than 1 year has passed since last update.

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

iaoiui
SIerでDocker, Kubernetes使って遊んでる人
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away