Share via


在 Azure 容器登錄中鎖定容器映像

在 Azure 容器登錄中,您可以鎖定映像版本或存放庫,使其無法刪除或更新。 若要鎖定映像或存放庫,請使用 Azure CLI 命令 az acr repository update 來更新其屬性。

本文需要您在 Azure Cloud Shell 或在本機執行 Azure CLI (建議使用 2.0.55 版或更新版本)。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

重要

本文不適用於鎖定整個登錄,例如,在 Azure 入口網站中使用 [設定] > [鎖定],或 Azure CLI 中的 az lock 命令。 鎖定登錄資源並不會防止您在存放庫中建立、更新或刪除資料。 鎖定登錄只會影響管理作業,例如新增或刪除複寫,或刪除登錄本身。 鎖定資源以防止非預期的變更中的詳細資訊。

案例

根據預設,Azure Container Registry 中的已標記映像為「可變動」,因此使用適當的權限,即可重複更新具有相同標記的映像,並將其推送至登錄。 您也可以視需要刪除容器映像。 當您開發映像並需要維護登錄的大小時,此行為十分有用。

不過,當您將容器映像部署至生產環境時,可能需要「不可變」的容器映像。 不可變的映像是您無法意外刪除或覆寫的映像。

如需登錄中標記和版本設定映像的策略,請參閱標記和版本設定容器映像的建議

使用 az acr repository update 命令來設定存放庫屬性,讓您可以:

  • 鎖定映像版本或整個存放庫

  • 保護映像版本或存放庫,使其免於刪除,但允許更新

  • 防止映像版本或整個存放庫上的讀取 (提取) 作業

如需範例,請參閱下列各節。

鎖定映像或存放庫

顯示目前的存放庫屬性

若要查看存放庫的目前屬性,請執行下列 az acr repository show 命令:

az acr repository show \
    --name myregistry --repository myrepo \
    --output jsonc

顯示目前的映像屬性

若要查看標記的目前屬性,請執行下列 az acr repository show 命令:

az acr repository show \
    --name myregistry --image myrepo:tag \
    --output jsonc

依標記鎖定映像

若要鎖定 myregistry 中的 myrepo:tag 映像,請執行下列 az acr repository update 命令:

az acr repository update \
    --name myregistry --image myrepo:tag \
    --write-enabled false

依資訊清單摘要鎖定映像

若要鎖定依資訊清單摘要所識別的 myrepo 映像 (SHA-256 雜湊,表示為 sha256:...),請執行下列命令。 (若要尋找與一或多個映像標記相關聯的資訊清單摘要,請執行 az acr manifest list-metadata 命令。)

az acr repository update \
    --name myregistry --image myrepo@sha256:123456abcdefg \
    --write-enabled false

鎖定存放庫

若要鎖定 myrepo 存放庫和其中的所有映像,請執行下列命令:

az acr repository update \
    --name myregistry --repository myrepo \
    --write-enabled false

列出目前的存放庫屬性

若要更新存放庫屬性以指出映像鎖定清單,請執行 az acr repository update 命令。

az acr repository update \
    --name myregistry --repository myrepo \ 
    --list-enabled false

在映像鎖定上顯示映像屬性

若要查詢在屬性上啟用 --list-enabled false 的映像鎖定標記,請執行 az acr repository show 命令。

az acr repository show-manifests \
    --name myregistry --repository myrepo \
    --query "[?listEnabled==null].tags" 
    --output table

檢查標記及其對應指令清單的映像屬性。

注意

  • 標記和指令清單的可變更屬性會分開管理。 也就是說,針對標記設定屬性 deleteEnabled=false 不會為對應的指令清單設定相同。
  • 使用下列指令碼查詢屬性:
registry="myregistry"
repo="myrepo"
tag="mytag"

az login
az acr repository show -n $registry --repository $repo
az acr manifest show-metadata -r $registry -n "$repo:$tag"
digest=$(az acr manifest show-metadata -r $registry -n "$repo:$tag" --query digest -o tsv)
az acr manifest show-metadata -r $registry -n "$repo@$digest"

注意

如果映像屬性是使用 writeEnabled=falsedeleteEnabled=false 來設定,則會封鎖映像刪除。

保護映像或存放庫,使其免於刪除

保護映像,使其免於刪除

若要允許更新 myrepo:tag 映像但無法刪除,請執行下列命令:

az acr repository update \
    --name myregistry --image myrepo:tag \
    --delete-enabled false --write-enabled true

保護存放庫,使其免於刪除

下列命令會設定 myrepo 存放庫,使其無法刪除。 個別映像仍然可以進行更新或刪除。

az acr repository update \
    --name myregistry --repository myrepo \
    --delete-enabled false --write-enabled true

防止映像或存放庫上的讀取作業

若要防止 myrepo:tag 映像上的讀取 (提取) 作業,請執行下列命令:

az acr repository update \
    --name myregistry --image myrepo:tag \
    --read-enabled false

若要防止 myrepo 存放庫中所有映像的讀取作業,請執行下列命令:

az acr repository update \
    --name myregistry --repository myrepo \
    --read-enabled false

解除鎖定映像或存放庫

若要還原 myrepo:tag 映像的預設行為,以將其刪除和更新,請執行下列命令:

az acr repository update \
    --name myregistry --image myrepo:tag \
    --delete-enabled true --write-enabled true

若要還原 myrepo 存放庫和所有映像的預設行為,以將其刪除和更新,請執行下列命令:

az acr repository update \
    --name myregistry --repository myrepo \
    --delete-enabled true --write-enabled true

下一步

在本文中,您已了解如何使用 az acr repository update 命令來防止刪除或更新存放庫中的映像版本。 若要設定其他屬性,請參閱 az acr repository update 命令參考。

若要查看針對映像版本或存放庫所設定的屬性,請使用 az acr repository show 命令。

如需刪除作業的詳細資料,請參閱刪除 Azure Container Registry 中的容器映像