44
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

44
39
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
44
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?