LoginSignup
43
38

More than 5 years have passed since last update.

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

Posted at

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

43
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
38