イメージ digest とは?正確なビットを固定する
イメージ digest はコンテンツハッシュ(sha256:...)で、正確なイメージ内容を一意かつ恒久的に識別します - タグと違い、決して新しいものを指すことはできません。
タグは便利ですが可変です: 今日の myapp:latest は明日には別のバイト列になり得ます。digest はその曖昧さを取り除きます。イメージの内容そのものから計算されるため、同じ digest は常に同じバイト列を意味します。サプライチェーンの完全性のためには、digest で pin することがゴールドスタンダードです。
コンテンツアドレス指定
digest はイメージ manifest の SHA-256 ハッシュです。layer やメタデータを変えれば digest も変わります。だからこそ入力が同一の 2 つの build は同じ digest を生成し - そして digest が正確な内容の証明になるのです。
digest で参照する
repo@sha256:abc123... の形で pin します。例えば node@sha256:...。参照にタグがないため、upstream の何ものもあなたの足元で内容をすり替えることはできません。
digest とタグ
タグはメンテナが指し先を変えられる可動なラベルですが、digest は不変です。人間可読性のためにはタグを、テストしたものを正確に deploy する保証が必要なときには digest を使いましょう。
digest が真価を発揮する場面
- build が再現可能になるようベースイメージを pin する。
- pipeline がテストした正確なイメージを deploy する。
- digest を参照する来歴(provenance)と attestation。
CI/CD における digest
堅牢な pipeline はイメージをビルドし、その digest を捕捉し、その digest(浮動するタグではなく)を deploy ステップに渡します - テストされた artifact が deploy されるものであることを保証します。マネージド runner はこれらの pull を高速に保ち、一時的なレジストリエラーをリトライします。
重要なポイント
- digest は、正確で不変なイメージ内容を名指しする SHA-256 ハッシュです。
repo@sha256:...で pin します。タグは動き得ますが、digest は動きません。- テストしたものをそのまま出荷するため、build と deploy の間で digest を受け渡しましょう。