logo头像

Edward.K Thinking

快速刪除Azure Container Registry內的Image


在Azure上面我們可以把客製化的Image存放到到Azure Container Registry裡面,作為私人或是企業自己私有的Docker Store,不過呢,畢竟在Azure存放還是需要$$,另外,再加上如果是採用DevOps團隊,每次Build出新的Image就放到ACR上,久了之後不僅管理不方便,也是要花一些錢,如果有價值的Image花錢還好,如果已經過時的就難免會浪費。


如果要刪除Image或是tag,可以在Azure Portal直接操作就可以,不過一次要大量刪除多個Image或是tag就沒有這樣簡單,所以,這邊透過az cli方式來做控制,再搭配PowerShell讓程式幫我們去刪除


當然第一步必須在自己電腦安裝好az cli,才有辦法使用。然後,先登入ACR

1
az acr login -n ACRName

列出在ACR裡面所有的Image,並用table格式呈現

1
$repositorys=az acr repository list --name ACRName --output table

因為透過ouput table前面第一行和第二行,會出現Result----這兩個不是我們要的,所以,在下面用迴圈儲存Image資訊要略過這兩個行

1
2
3
4
for($i=2;$i -le $repositorys.Count;$i++)
{
刪除邏輯
}

如果有些Image是不可以被刪除,可以透過下面方式避免掉

1
if( !([string]::IsNullOrEmpty($repositorys[$i])) -and  !($repositorys[$i].contains("XXX")) )

取得image後,當然可以透過az acr delete直接砍掉image,但是如果只是要砍掉image裡面的tag就必須透過下面方式處哩,先取得image name,然後再找到在這個image name下面的所有tag,另外,可以透過--detail指令取得最該image的詳細資訊,如果沒有用--detail也是可以直接取得tag name,但要針對image tag的建立時間進行排序,就必須要多--detail指令

1
2
3
$tags=az acr repository show-tags -n ACRName --repository $repositorys[$i] --orderby time_asc --detail
$tags=$tags | ConvertFrom-Json
$name=$tags.name

在透過show-tags出來資訊格式是json格式的字串,未了後續資料處裡的方便性,必須把json字串轉成物件處理,有了這些資訊就可以直接進行下一步的刪除動作,這邊移除動作可以使用untag或是delete都可以。因為,一個image的tag很多,如果想要保留最近幾個image,下方是先將tag透過time去排序後,保留前面較新的tag,其他都做砍掉動作

1
2
3
4
5
6
for($j=0;$j -le $name.Count-4;$j++)
{
$image= $repositorys[$i]+":"+$name[$j]
#Delete
az acr repository untag -n ACRName --image $image
}

以上這樣方式就可以慢慢移除相關的不需要的image或是tag,下方為完整程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#Login
#az acr login -n ACRName

#讀取存放庫
$repositorys=az acr repository list --name ACRName --output table

for($i=2;$i -le $repositorys.Count;$i++)
{
if( !([string]::IsNullOrEmpty($repositorys[$i])) -and !($repositorys[$i].contains("XXX")) )
{
$tags=az acr repository show-tags -n ACRName --repository $repositorys[$i] --orderby time_asc --detail
$tags=$tags | ConvertFrom-Json
$name=$tags.name

for($j=0;$j -le $name.Count-4;$j++)
{
$image= $repositorys[$i]+":"+$name[$j]
#Delete
az acr repository untag -n ACRName --image $image
}
}
}

參考資料


上一篇