映象摘要
什麼是 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
- 前往 Docker Hub 並登入。
- 導航到您組織的名稱空間並開啟映象的 DHI 倉庫。
- 選擇 **標籤** 選項卡以檢視映象變體。
- 列表中的每個標籤都包含一個 **摘要** 欄位,顯示映象的 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 強制執行基於摘要的策略時,每個平臺變體都會使用其摘要單獨評估。