結果、次回 build 時にコマンドを再実行せず、layer を cache として使って build 時間の短縮ができます。
また、build に失敗した場合でも、layer の id を指定して docker run して原因特定、などができます。
などなど、 RUN ごとに layer を作成することには多くのメリットがあります。
ですが、'毎回 layer を作成する == 全コマンド結果保存' ということでもあるので、image のサイズが大きくなります。
ビルドする側からすると、全 layer を保存しても問題無いと思います。
ですが、ダウンロードする側、特に何度もダウンロードが発生する場合はサイズが小さいほど良い。
例えば dockerhub にイメージを登録する場合がありますね。
image 作成過程の試行錯誤を dockerhub に登録して、ダウンロード容量が大きくなるとよろしくない。
と、いうことで、layer を統合してサイズを抑えてみます。
環境
- OS: macOS Sierra 10.12.6
- Docker for mac: 18.03.1-ce, build 9ee9f40
export/import
と、言ったはものの、同じ考えをしている方がまとめていました。
export/import すれば layer を統合できます。
統合というか結果的に1 layer になる、という言い方が正確です。
具体的なコマンドはこんな感じ。
- $ docker run -itd --name nya big-image
- $ docker export nya > nya.tar
- $ cat nya.tar | docker import - big-image-single:latest
今回試してみた image では、57 layers(13GB) -> 1 layer(9GB) になりました。
イメージの性質による思いますが、なかなか効果がありますね。
ちなみに、image save/image import をすると全 layer 含めて export するので縮小はできません。
0 件のコメント:
コメントを投稿