映象摘要

什麼是 Docker 映象摘要?

Docker 映象摘要是代表 Docker 映象內容的唯一加密識別符號(SHA-256 雜湊值)。與可重複使用或更改的標籤不同,摘要是不可變的,可確保每次都拉取完全相同的映象。這保證了不同環境和部署之間的一致性。

例如,`nginx:latest` 映象的摘要可能如下所示

sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a

此摘要唯一標識 `nginx:latest` 映象的特定版本,確保映象內容的任何更改都會導致不同的摘要。

為什麼映象摘要很重要?

使用映象摘要而不是標籤具有以下幾個優點

  • 不變性:一旦映象構建並生成了其摘要,與該摘要關聯的內容就不能更改。這意味著,如果您使用摘要拉取映象,您可以確信您正在檢索的正是最初構建的映象。

  • 安全性:摘要有助於透過確保映象內容未被篡改來防止供應鏈攻擊。即使映象內容發生微小更改,也會導致完全不同的摘要。

  • 一致性:使用摘要可確保在不同環境中使用相同的映象,從而降低開發、暫存和生產環境之間出現差異的風險。

Docker 強化映象摘要

透過使用映象摘要來引用 DHI,您可以確保您的應用程式始終使用完全相同的安全映象版本,從而增強安全性和合規性

檢視映象摘要

使用 Docker CLI

要檢視 Docker 映象的映象摘要,您可以使用以下命令。將 `<image-name>:<tag>` 替換為映象名稱和標籤。

$ docker buildx imagetools inspect <image-name>:<tag>

使用 Docker Hub UI

  1. 前往 Docker Hub 並登入。
  2. 導航到您組織的名稱空間並開啟映象的 DHI 倉庫。
  3. 選擇 **標籤** 選項卡以檢視映象變體。
  4. 列表中的每個標籤都包含一個 **摘要** 欄位,顯示映象的 SHA-256 值。

按摘要拉取映象

按摘要拉取映象可確保您拉取的是由指定摘要標識的精確映象版本。

要使用其摘要拉取 Docker 映象,請使用以下命令。將 `<image-name>` 替換為映象名稱,將 `<digest>` 替換為映象摘要。

$ docker pull <image-name>@sha256:<digest>

例如,要使用其摘要 `94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a` 拉取 `docs/dhi-python:3.13` 映象,您將執行

$ docker pull docs/dhi-python@sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a

多平臺映象和清單

Docker 強化映象作為多平臺映象釋出,這意味著單個映象標籤(例如 `docs/dhi-python:3.13`)可以支援多個作業系統和 CPU 架構,例如 `linux/amd64`、`linux/arm64` 等。

多平臺標籤不是指向單個映象,而是指向清單列表(也稱為索引),它是一個更高級別的物件,引用多個映象摘要,每個受支援平臺一個。

當您使用 `docker buildx imagetools inspect` 檢查多平臺映象時,您會看到類似這樣的內容

Name:      docs/dhi-python:3.13
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:6e05...d231

Manifests:
  Name:        docs/dhi-python:3.13@sha256:94a0...ea1a
  Platform:    linux/amd64
  ...

  Name:        docs/dhi-python:3.13@sha256:7f1d...bc43
  Platform:    linux/arm64
  ...
  • 清單列表摘要 (`sha256:6e05...d231`) 標識整個多平臺映象。
  • 每個平臺特定映象都有自己的摘要(例如,`linux/amd64` 的 `sha256:94a0...ea1a`)。

為何這很重要

  • 可復現性:如果您在不同的架構上構建或執行容器,單獨使用標籤將解析為適用於您平臺的相應映象摘要。
  • 驗證:您可以拉取並驗證您平臺的特定映象摘要,以確保您使用的是確切的映象版本,而不僅僅是清單列表。
  • 策略強制:使用 Docker Scout 強制執行基於摘要的策略時,每個平臺變體都會使用其摘要單獨評估。