在 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=false
或 deleteEnabled=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 \
--name myregistry --image $repo@$digest \
--delete-enabled true --write-enabled true
下一步
在本文中,您已了解如何使用 az acr repository update 命令來防止刪除或更新存放庫中的映像版本。 若要設定其他屬性,請參閱 az acr repository update 命令參考。
若要查看針對映像版本或存放庫所設定的屬性,請使用 az acr repository show 命令。
如需刪除作業的詳細資料,請參閱刪除 Azure Container Registry 中的容器映像。