Dockerイメージのレイヤー解析
Docker Image Explorer
書き出したイメージのtarを開き、レイヤーごとのコマンド・大きさ・足したり消したりしたファイルを見せます。
書き出したDockerやOCIのイメージを開き、レイヤーごとに実際に何が入っているのかを見せます。大きさ、そのレイヤーを作ったDockerfileの手順、追加したファイル、そして下のレイヤーから消したファイルまで出ます。イメージがなぜ300メガバイトなのかを突き止める方法です。
書き出したイメージ(.tar)を置く
`docker save image:tag -o image.tar` か podman save で作ったファイルです。このタブの中で解析し、どこにもアップロードしません。
docker save の tar と OCI イメージレイアウトの両方を開き、設定の history からレイヤーごとの Dockerfile の手順を突き合わせます( empty_layer と印の付いた手順 — ENV、CMD、LABEL — はレイヤーを作らないので別に並べます)。削除は OCI の whiteout 規約から読みます。 .wh.name という項目は、下のレイヤーにある name を取り除きます。ファイル自体は下のレイヤーに残ったままで、そのぶんの容量も食い続けます。使い方
イメージを書き出します
`docker save image:tag -o image.tar`か、それに相当する`podman save`を使います。OCIのイメージレイアウトでも構いません。
tarを置きます
このタブのワーカーの中でパースします。何もアップロードしません。イメージのtarにはファイルシステム全体が入っているので、そこが大事なところです。
大きいレイヤーを開きます
行ごとに大きさが棒で、対応するDockerfileの手順とともに出ます。開くと、そのレイヤーが追加した大きなファイルが並び、消したものと隠したものも別に出ます。
よくある質問
後ろのRUNで消したのに、イメージが大きいままなのはなぜですか
削除そのものが1つのレイヤーだからです。OCIのwhiteoutの約束事は`.wh.name`という項目を書いて、下のレイヤーの`name`を隠すだけです。元のファイルはそこにあり続け、配布され続け、容量にも数えられ続けます。作ったのと同じ`RUN`の中で消すか、マルチステージビルドを使ってください。
レイヤーの無いDockerfileの手順があるのはなぜですか
ENV、CMD、LABEL、EXPOSEなどは設定を変えるだけで、ファイルシステムには触れません。だからイメージのhistoryが`empty_layer`と印を付けます。ここでは別に並べているので、実際に容量を使うものとレイヤーの番号がずれません。
レジストリから直接開けますか
開けません。ローカルのtarだけを読みます。取ってくるとなると、このページがレジストリに対して認証することになりますが、それは脅威モデルの違う別の道具です。`docker save`は1回で済みます。
ここに出る大きさが`docker images`と違います
測っているものが違います。`docker images`は、ストレージドライバが共有レイヤーを重複排除したあとのディスク上の大きさです。ここは、書き出したファイルの中の各レイヤーの、圧縮前の内容の大きさです。どちらも正しく、`docker pull`が何を運ぶのかを教えてくれるのは後者です。
ここから渡せます
docker runをComposeに
docker run to Compose
docker runのコマンドラインをcomposeのサービス定義に直し、逆方向の変換もできます。
WebAssemblyの解析
WebAssembly Inspector
.wasmモジュールのインポート・エクスポート・メモリ・セクションの大きさを並べ、テキスト形式でも出力します。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
鍵ペア生成
Key Pair Generator
RSA・ECDSA・Ed25519の鍵ペアを作り、PEM・JWK・OpenSSHで書き出します。
次の一手
このツールが出したものをそのまま受け取れる道具です。
圧縮ファイルの中身検査
Archive Inspector
解凍せずにzipの中を開き、パスをはみ出す項目・実行ファイル・マクロ・zip爆弾に印を付けます。
docker runをComposeに
docker run to Compose
docker runのコマンドラインをcomposeのサービス定義に直し、逆方向の変換もできます。
16進ダンプビューアー
Hex Viewer
どんなファイルもオフセット・16進・ASCIIのダンプで開き、マジックバイトから形式を当て、検索の当たりを光らせます。
JSON⇄CSV変換
JSON ⇄ CSV
入れ子のJSONをドット記法の列名で平らに開くか、表からオブジェクトを組み直します。
JSON差分比較
JSON Diff
キーの順序を無視して2つのJSONを構造で比べ、追加・削除・変更されたパスを挙げます。
JSONフォーマッター・検証
JSON Formatter & Validator
JSONを整形・圧縮して検証し、構文エラーがあれば行と列を正確に指し示します。