前言

前一篇文章 "Open Source Registry - Harbor 介紹與安裝" 中我們簡單介紹 Harbor 並詳細說明如何透過 docker compose 方式進行架設。在本篇文章,我們將介紹 Harbor 管理架構 (Proeject, Repos, and Artifact) 與 image 基本操作,並說明專案管理一些注意事項,讓讀者可以快速理解並開始使用 Harbor。本篇文章若有錯誤或任何建議,請各位前輩不吝提出。






架構與建立專案

管理者可以在 Harbor 上建立多個 Public/Private Project (公開與私有專案) 對 Image 進行分類管理。公開專案顧名思義即只要是 Harbor 使用者,皆可以檢視並對內部 Image 進行操作;私有專案則是有指派的使用者或授權的群組才可以檢視或進行操作。在 Project 內存放 Image 稱為 Repository,相同 Image 名稱但 Tag 不同會放在相同的 Repository 內,以 Artifact 區分。


當 Harbor 建立完成後,預設會提供一個 library 預設公開專案。從下圖中可以看見 Library 內已經有一個我先 push  mongodb image 的 repository。條列頁上會顯示有多少個 Artifact、Pull 數量與最後修改時間。





點選 Repository,您可以看見數個 Artifact (相同 image 名稱但內容不同成品),每一個 Artifact 可以給予多個 Tag。 在此可以檢視此每一個 Artifact 簽署、大小、軟點掃描、推送與拉取時間。

當你需要拉取 Image 時,可以透過 docker pull [image:tag] 指令做拉取 Image 動作。在 Repsitory 內也有複製按鈕讓使用者免手動,直接複製指令下載 Image。但在此畫面所提供 Image 名稱或以 sha 為主,使用可以進入任一 artifact 內,點選 Tag 旁的複製按鈕,即會以 [image:tag] 名稱格式進行下載。





點擊 Artifact 可以檢視詳細資訊,包含 Tag、概覽與建置歷史, Image 一目了然。Harbor 也很貼心的提供 Docker/Podman 的指令讓使用者複製。






理所當然,管理者可以自行建立公開/私有專案。在專案畫面左上角點選建立專案





你可以設定名稱 (小寫英文、數字與 .-_ 符號)、Quote、是否為 Proxy 模式。由於 Proxy 模式的專案不能由使用者推送 Image 而是由從其他地方拉取 Image 並進行存放並提供使用。為了後續推送與拉取 Image 操作範例,我們這邊不勾選,後續的章節會詳細說明 Proxy 模式使用方式。

注意: 我們會建議管理者設定 Quote 避免 Image 無限制的增加,當牴觸到容量上限,使用者將無法繼續推送 Image。





Project 可以設定很多功能,其功能分類大致可以分為: Image 管理 (摘要、儲存庫、標籤、原則)、權限控制 (成員、機器人帳號)、安全掃描 (掃描器)、日誌與通知 (Webhook、日誌) ...等,後面我們有機會再一一說明。










推送與拉取 Image (Push and Pull Image)

建立完 Project 後,我們可以開始推送 Image 至 Harbor。若你是初學者或對 Docker 指令有點陌生,在每個專案內 Repository 條列畫面旁邊有推送命令的按鈕,貼心提供 Tag 與 Push 指令讓使用者參考。





如果對於 docker 指令不陌生,讀者應該知道可以透過 docker tag 方式變更 image 與 tag 名稱,再透過 docker push 推送 image。只需要將 image 名稱最前方改成 harbor 位置即可。

docker tag mongo:latest duran-harbor.japaneast.cloudapp.azure.com/demo/mongodb:v1
docker push duran-harbor.japaneast.cloudapp.azure.com/demo/mongodb:v1





上傳完成後回到 Harbor demo 專案內,你可以發現該 image 資訊,並已經使用配額 (佔容量)。





理所當然,你可以刪除此 image (有足夠權限情況下)
注意:當你刪除 image 時,在 Harbor Project 容量上會有變化,但實際上在整個 Harbor 與實際硬碟容量不會有變化,您需要透過 GC (清理功能) 才能釋放出空間,我們後續會介紹。




我們可以透過標籤 (Label) 來標註 Image 用途以方便管理:你可以點選上方標籤功能,新增標籤
注意: Tag 與 Label 在中文介面皆翻譯成標籤,前者為 docker image 管理時使用,後者則是在 Harbor 上的標註,兩者不同





回到 mongodb artfiact (從專案 > 儲存庫 > 點選該 image),勾選要標籤的 artifact,點選操作 > 新增標籤 > 選擇標籤。






如此一來,即可快速識別此版本用途,方便管理





此章節我們簡單說明如何建立新的 Project 、進行拉取/推送 image 動作與標籤 (Label) 功能。對於 image 操作的讀者應該算是簡單。在下一篇文章,我將開始說明 Harbor 登入機制設定與權限控管,讓管理者對於權限管理能有更深一層的了解。