天天看點

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

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) :負責收集其他元件的日志到一個地方
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

如上圖所示: 所有的請求都經過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
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
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
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
sh /usr/local/harbor/install.sh
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
docker ps
docker images
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
docker-compose ps
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

1、此時可真機通路serverIP

192.168.19.17
使用者名:admin
密碼:Harbor12345
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

2、添加項目并填寫項目名稱

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

此時可使用 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
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

檢視圖形化界面

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

以上操作都是在 Harbor 伺服器本地操作。如果其他用戶端上傳鏡像到 Harbor,就會報

如下錯誤。出現這問題的原因 Docker Registry 互動預設使用的是 HTTPS,但是搭建私有鏡

像預設使用的是 HTTP 服務,是以與私有鏡像互動時出現以下錯誤。

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

解決方法:

vim /usr/lib/systemd/system/docker.service
添加  --insecure-registry serverIP
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
systemctl daemon-reload
systemctl restart docker
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
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
           
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

.

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

圖形界面檢視

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理

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使用者

Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker Harbor私有倉庫部署于管理
Docker Harbor私有倉庫部署于管理Docker 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