【Docker】wagoodman/dive によるイメージ中の各レイヤーの容量とファイルの変更の調査

 wagoodman/dive: A tool for exploring each layer in a docker image
 wagoodman/dive は Docker イメージの各レイヤーを調査するためのツールです。大雑把に使うには次の様に wagoodman/dive に親となる Docker のアクセス方法を渡し、調査対象のイメージを引数として docker run するのがいいです。

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive [image名 or imageID]
# 例.
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive mysql:5.7
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive dcb0aab0a5e0

 このコマンドで次の様なレイヤーとそれに対応するファイルシステムの変化を見ることができます。これを上手く使うとイメージから Dockerfile を作るリバースエンジニアリングもできます。

 wagoodman/dive が便利な時は Docker イメージの容量を削減したり、ビルドに失敗した Docker イメージの中で何が起きていたか調べる時です。
 イメージの容量を削減する際にはボトルネックとなるレイヤーを簡単に見つけられます。これは dive 実行時の左上の Layers 欄を見れば一発です Docker Desktop も次添付ファイルの様に似たことができますが、dive ではレイヤー中のファイルシステムの中を調べることができ、何が原因となってボトルネックとなっているか調べやすいです。パッケージマネージャの不要なキャッシュ(yarnなど)がイメージの容量を食っているとわかった時など容量を最適化するチャンスです。

 またイメージビルドの失敗の原因の手掛かりにもなります。都度 Dockerfile 内にRUN lsなど書かずとも壊れた状態をすぐ見れます。これを行うにはビルド失敗直後にdocker images -aとコマンドを実行して、つい最近 CREATED された無名のイメージの ID を取得し、

docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive [イメージID]
例.
# 次の様に docker images -a の結果が出力されたならば
# REPOSITORY                                 TAG              IMAGE ID       CREATED        SIZE
# <none>                                     <none>           dcb0aab0a5e0   7 hours ago    556MB
# IMAGE ID を渡して次の様に実行
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive dcb0aab0a5e0

とするのがいいです。この方法は、エラーメッセージに直接現れないあるべきファイルがなかったり余分なファイルが既にあったりするビルド失敗の原因にたどり着きやすいです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG