web-dev-qa-db-ja.com

DockerイメージのイメージIDとそのダイジェストの違いは何ですか?

これは私にとって驚くほど混乱しています。 DockerのイメージIDはSHA256ハッシュだと思いました。ただし、docker image ls --digestsの結果(列ヘッダーDIGESTの下に表示)は、その画像のIMAGE IDとは明らかに異なります。

例えば

docker image ls --digests Alpine
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
Alpine              latest              sha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6   055936d39205        2 weeks ago         5.53MB

ながら

docker image ls --no-trunc
REPOSITORY                                             TAG                 IMAGE ID                                                                  CREATED             SIZE
...
Alpine                                                 latest              sha256:055936d3920576da37aa9bc460d70c5f212028bda1c08c0879aedf03d7a66ea1   2 weeks ago         5.53MB

明らかにsha256:055936d3920576da37aa9bc460d70c5f212028bda1c08c0879aedf03d7a66ea1(画像ID)とsha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6(DIGEST)は同じ値ではありません。しかし、なぜ?同じ画像の2つの異なるsha256ハッシュを使用する目的は何ですか。それぞれどのように計算されますか?

Docker Deep Diveの本を読んでいるときに混乱し、本でもオンラインでも明確な答えを見つけることができませんでした。

10
xji

Michalkのコメントをありがとう。短い答えは:

  • 「ダイジェスト」は、Dockerレジストリv2で導入されたマニフェストのハッシュです。
  • 画像IDは、ローカル画像のJSON設定のハッシュです。
7
xji