Docker Harbor私有倉庫部署于管理
一.Harbor概述
1.什麼是Harbor
- Harbor是VMware公司開源的企業級Docker Registry項目,其目标是幫助使用者迅速搭建一個企業級的Docker Registry服務
- Harbor以 Docker 公司開源的Registry 為基礎,提供了圖形管理UI、基于角色的通路控制(Role Based AccessControl)、AD/LDAP內建、以及審計日志(Auditlogging)等企業使用者需求的功能,同時還原生支援中文
- Harbor的每個元件都是以Docker 容器的形式建構的,使用docker-compose 來對它進行部署。用于部署Harbor 的docker- compose模闆位于harbor/ docker- compose.yml
2.Harbor的特性
1.基于角色控制: 使用者和倉庫都是基于項目進行組織的,而使用者在項目中可以擁有不同的權限
2.基于鏡像的複制政策: 鏡像可以在多個Harbor執行個體之間進行複制(同步)
3.支援LDAP/AD: Harbor 可以內建企業内部有的AD/LDAP (類似資料庫的一-張表),用于對已經存在的使用者認證和管理
4.鏡像删除和垃圾回收: 鏡像可以被删除,也可以回收鏡像占用的空間
5.圖形化使用者界面: 使用者可以通過浏覽器來浏覽,搜尋鏡像倉庫以及對項目進行管理
6.審計管理: 所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理
7.支援RESTful API: RESTful API提供給管理者對于Harbor 更多的操控,使得與其它管理軟體內建變得更容易
8.Harbor 和docker registry的 關系: Harbor實質 上是對docker registry做 了封裝,擴充了自己的業務模闆
3.Harbor的構成
Harbor在架構上主要有Proxy、 Registry、 Core services、 Database (Harbor-db) 、Log collector ( Harbor-log)、Job services六個元件
- Proxy: Harbor 的Registry、 UI、Token 服務等元件,都處在nginx 反向代理後邊。該代理将來自浏覽器、docker clients的請求轉發到後端不同的服務上
- Registry:負責儲存Docker 鏡像,并處理Docker push/pull指令。由于要對使用者進行通路控制,即不同使用者對Docker 鏡像有不同的讀寫權限,Registry 會指向一個Token 服務,強制使用者的每次Docker pull/push 請求都要攜帶一個合法的Token,Registry會通過公鑰對Token進行解密驗證
- Core services: Harbor的核心功能,主要提供以下3個服務:
UI (harbor-ui) :提供圖形化界面,幫助使用者管理Registry. 上的鏡像( image),并對使用者進行授權
WebHook: 為了及時擷取Registry.上image 狀态變化的情況,在Registry. 上配置 Webhook,把狀态變化傳遞給UI子產品
Token 服務:負責根據使用者權限給每個Docker push/pull 指令簽發Token。 Docker 用戶端向Registry服務發起的請求,如果不包含Token,會被重定向到Token服務,獲得Token後再重新向Registry 進行請求
- Database (harbor-db) :為core services提供資料庫服務,負責儲存使用者權限、審計日志、Docker 鏡像分組資訊等資料
- Job services: 主要用于鏡像複制,本地鏡像可以被同步到遠端Harbor 執行個體上
- Log collector (harbor-log) :負責收集其他元件的日志到一個地方
如上圖所示: 所有的請求都經過proxy代理,proxy代理轉發給Core services和Registry,其中Core services包括UI界面、token令牌和webhook網頁服務功能,Registry主要提供鏡像存儲功能。如果要進行下載下傳上傳鏡像,要經過token令牌驗證然後從Registry擷取或上傳鏡像,每一次下載下傳或上傳都會生成日志記錄,會記入Log collector,而使用者身份權限及一些鏡像語言資訊會被存儲在Database中。
• Harbor的每個元件都是以Docker 容器的形式建構的,是以,使用Docker Compose 來對它進行部署。
• 總共分為7個容器運作,通過在docker-compose.yml所在目錄中執行docker-compose ps指令來檢視,
名稱分别為: nginx、 harbor-jobservice、 harbor-ui、 harbor-db、harbor-adminserver、registry、 harbor-log.
其中harbor-adminserver主要是作為一個後端的配置資料管理,并沒有太多的其他功能。harbor-ui所要操作的所有資料都通過harbor-adminserver這樣一個資料配置管理中心來完成。
二.Harbor部署
環境準備
1、環境配置
主機 | 作業系統 | IP位址 | 軟體 |
---|---|---|---|
Harbor伺服器 | centos7.6 | 192.168.19.17 | docker-ce、docker-compose、 harbor-offline-v1.2.2 |
client伺服器 | centos7.6 | 192.168.19.18 | docker-ce |
2、案例需求
通過Harbor建立Docker私有倉庫
圖形化管理Docker私有倉庫鏡像
3、部署Harbor服務
Harbor 被部署為多個 Docker 容器,是以可以部署在任何支援 Docker 的 Linux 發行版 上。
服務端主機需要安裝 Python、Docker 和 Docker Compose。
安裝包:harbor-offline-installer-v1.2.2.tgz
docker-compose
cd /usr/local
rz docker-compose
chmod +x docker-compose
mv docker-compose /usr/bin
rz harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
==配置Harbor參數檔案==
vim /usr/local/harbor/harbor.cfg
==第5行修改==
hostname = 192.168.19.18
sh /usr/local/harbor/install.sh
docker ps
docker images
docker-compose ps
1、此時可真機通路serverIP
192.168.19.17
使用者名:admin
密碼:Harbor12345
2、添加項目并填寫項目名稱
此時可使用 Docker 指令在本地通過 127.0.0.1 來登入和推送鏡像。預設情況下,
Register 伺服器在端口 80 上偵聽
#登陸
docker login -u admin -p Harbor12345 http://127.0.0.1
#下載下傳鏡像進行測試
docker pull tomcat
#鏡像打标簽
docker tag tomcat 127.0.0.1/myproject-lic/tomcat:v1
#上傳鏡像到Harbor
docker push 127.0.0.1/myproject-lic/tomcat:v1
檢視圖形化界面
以上操作都是在 Harbor 伺服器本地操作。如果其他用戶端上傳鏡像到 Harbor,就會報
如下錯誤。出現這問題的原因 Docker Registry 互動預設使用的是 HTTPS,但是搭建私有鏡
像預設使用的是 HTTP 服務,是以與私有鏡像互動時出現以下錯誤。
解決方法:
vim /usr/lib/systemd/system/docker.service
添加 --insecure-registry serverIP
systemctl daemon-reload
systemctl restart docker
docker pull nginx
docker tag nginx:latest 192.168.19.18/sweathart-jingjing/nginx:v1
docker push 192.168.19.18/sweathart-jingjing/nginx:v1
.
圖形界面檢視
4、維護管理Harbor
可以使用 docker-compose 來管理 Harbor。一些有用的指令如下所示,必須在與
docker-compose.yml 相同的目錄中運作。
修改 Harbor.cfg 配置檔案
要更改 Harbour 的配置檔案時,請先停止現有的 Harbour 執行個體并更新 Harbor.cfg;然
後運作 prepare 腳本來填充配置;最後重新建立并啟動 Harbour 的執行個體。
#解除安裝
docker-compose down -v
#編輯配置檔案
vim harbor.cfg
#填充配置
./prepare
#啟動Harbor
docker-compose up -d
#如果報錯
解決思路
關閉防火牆、重新開機docker
systemctl stop firewalld
setenfore 0
systemctl restart docker
5、建立Harbor使用者
client操作
docker logout 192.168.19.18
docker login 192.168.19.18
jingjing
Harbor12345
docker images
docker rmi 192.168.19.18/sweetheat-jingjing/nginx:v1
docker pull 192.168.19.18/sweetheat-jingjing/nginx:v1
6、移除 Harbor 服務容器同時保留鏡像資料/資料庫
在server上進行操作
docker-compose down -v
#如果需要重新部署,需要移除Harbor服務容器全部資料
#持久資料,如鏡像,資料庫等在主控端的/data目錄下,日志在主控端的/var/log/Harbor目錄下
rm -rf /data/database
rm -rf /data/registry