docker のイメージというのはいくつものイメージの重なり、レイヤーと呼びますが、このレイヤーの重なりで出来ています。レイヤーごと必要なファイルを増やしていく感じですね。レイヤーを見るには docker history
を使います。
ここで次のような Dockerfile をビルドしてみます。
Dockerfile
1FROM debian
2RUN touch /foo
3CMD ["echo", "nyaan"]
そして docker history
を実行すると各コマンドごとにレイヤーが作られ ID が振られているのが解ると思いますが、最後の行だけ <missing>
が現れ、そして例の ADD file:...
が出てきました。
IMAGE CREATED CREATED BY SIZE COMMENT
04ba6f024535 3 hours ago /bin/sh -c #(nop) CMD ["echo" "nyaan"] 0B
ce67ee3ec050 3 hours ago /bin/sh -c touch /foo 0B
6d6b00c22231 5 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 5 weeks ago /bin/sh -c #(nop) ADD file:6014cd9d7466825f8… 114MB
この正体は何かは Docker の公式ドキュメントに述べられています。
Note: The <missing>
lines in the docker history output indicate that those layers were built on another system and are not available locally. This can be ignored.
About storage drivers | Docker Documentation
実はというか docker イメージを作成するツールは docker のみではなく、Kaniko など色々存在します。そういったツールの中には history を残さず、ファイルを一気にイメージにしてしまうものもあるでしょう(ちょっとこの辺は推測です)。こうして作られたイメージはダイジェストのみが残り、残念ながら差分を辿れない、というわけです。
ちなみにイメージの中身は単なる tar
で、中身を取り出すことが出来ます。
docker イメージの中身を見る
これを利用して差分を知りたい二つのイメージのレイヤーを展開してまずはファイル名から当たりをつけてみる、なんてことができるのではないでしょうか。
あと散々語っておいてなんですけど、公式の Dokerfile をおいてあるリポジトリを見つけました。
corretto/corretto-docker: Dockerfiles for Amazon Corretto Official images.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。