私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

一、Harbor簡介

雖然Docker官方提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的。

Harbor是由VMware公司開源的企業級的Docker Registry管理項目,相比docker官方擁有更豐富的權限權利和完善的架構設計,適用大規模docker集羣部署提供倉庫服務。

它主要提供 Dcoker Registry 管理界面UI,可基於角色訪問控制,鏡像複製, AD/LDAP 集成,日誌審覈等功能,完全的支持中文。

二、Harbor 的主要功能

1.基於角色的訪問控制:

用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)裏有不同的權限。

2.基於鏡像的複製策略:

鏡像可以在多個Registry實例中複製(可以將倉庫中的鏡像同步到遠程的Harbor,類似於MySQL主從同步功能),尤其適合於負載均衡,高可用,混合雲和多雲的場景。

3.圖形化用戶界面:

用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。

4.支持 AD/LDAP:

Harbor可以集成企業內部已有的AD/LDAP,用於鑑權認證管理。

5.鏡像刪除和垃圾回收:

Harbor支持在Web刪除鏡像,回收無用的鏡像,釋放磁盤空間。image可以被刪除並且回收image佔用的空間。

6.審計管理:

所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。

7.RESTful API:

RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。

8.部署簡單:

提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設備。

Harbor 的所有組件都在 Docker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。

注意: 由於 Harbor 是基於 Docker Registry V2 版本,所以 docker 版本必須 > = 1.10.0 docker-compose >= 1.6.0

三、Harbor 架構組件

私有倉庫 Harbor 的搭建

1. Proxy:對應啓動組件nginx。它是一個nginx反向代理,代理Notary client(鏡像認證)、Docker client(鏡像上傳下載等)和瀏覽器的訪問請求(Core Service)給後端的各服務;

2. UI(Core Service):對應啓動組件harbor-ui。底層數據存儲使用mysql數據庫,主要提供了四個子功能:

Registry:對應啓動組件registry。負責存儲鏡像文件,和處理鏡像的pull/push命令。Harbor對鏡像進行強制的訪問控制,Registry會將客戶端的每個pull、push請求轉發到token服務來獲取有效的token。

UI:一個web管理頁面ui;

API:Harbor暴露的API服務;

Auth:用戶認證服務,decode後的token中的用戶信息在這裏進行認證;auth後端可以接db、ldap、uaa三種認證實現;

Token服務(上圖中未體現):負責根據用戶在每個project中的role來爲每一個docker push/pull命令issuing 一個token,如果從docker client發送給registry的請求沒有帶token,registry會重定向請求到token服務創建 token。

3. Admin Service:對應啓動組件harbor-adminserver。是系統的配置管理中心附帶檢查存儲用量,ui和jobserver啓動時候需要加載adminserver的配置;

4. Job Sevice:對應啓動組件harbor-jobservice。負責鏡像複製工作的,他和registry通信,從一個registry pull鏡像然後push到另一個registry,並記錄job_log;

5. Log Collector:對應啓動組件harbor-log。日誌彙總組件,通過docker的log-driver把日誌彙總到一起;

6. Volnerability Scanning:對應啓動組件clair。負責鏡像掃描

7. Notary:對應啓動組件notary。負責鏡像認證

8. DB:對應啓動組件harbor-db,負責存儲project、 user、 role、replication、image_scan、access等的metadata數據。

四、Harbor 部署

4.1、環境準備

// harbor 服務端,用於搭建私有倉庫

192.168.66.138 docker-ce、docker-compose(必須安裝)、Harbor

// client 客戶端,用於遠程訪問

192.168.66.129 docker-ce

4.2、在harbor 服務端(安裝compose 和 harbor)

【1】先部署Docker,網絡優化,鏡像加速

【2】部署 compose//在線下載docker-compose包
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
cp -p docker-compose /usr/local/bin/
docker-compose -v  //可以看到版本信息 

【3】 安裝 Harbot程序
// 在線下載harbor安裝包
wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
// 解壓
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

私有倉庫 Harbor 的搭建

【4】配置 Harbot 參數文件
vim /usr/local/harbor/harbor.cfg
hostname = 192.168.66.138    //改爲自己服務端本地的IP地址

【5】啓動 Harbot
sh /usr/local/harbor/install.sh

【6】查看 Harbot 啓動鏡像
// 查看鏡像
docker images
// 查看容器
docker ps -a
// 也可用docker-compose ps查看容器狀態,但是需要在/usr/local/harbor工作目錄下執行,不然會報錯。 
docker-compose ps     // 可以看到安裝了7個容器

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

【7】驗證
// http://192.168.66.138 的管理頁面
// 默認的管理員用戶名和密碼是 admin/Harbor12345
// 在網頁harbor上新建一個私有項目myproject,用來測試上傳、下載鏡像

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

在網頁harbor上新建一個私有項目myproject,用來測試上傳、下載鏡像

私有倉庫 Harbor 的搭建

【8】登錄harbor的字符界面
docker login -u admin -p Harbor12345 http://127.0.0.1/
// 下載鏡像進行測試
docker pull cirros
// 鏡像打標籤
docker tag cirros 127.0.0.1/myproject/cirros:v1
// 上傳鏡像到Harbor
docker push 127.0.0.1/myproject/cirros:v1

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

在UI界面可以看到剛剛上傳的鏡像

私有倉庫 Harbor 的搭建

4.3、客戶端遠程訪問管理 harbor

// 先部署Docker,網絡優化,鏡像加速

【1】必須要先指定私有倉庫的地址
vim /usr/lib/systemd/system/docker.service
// 14行修改添加,將私有倉庫地址添加上去。
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.66.138
 --containerd=/run/containerd/containerd.sock  

// 重啓服務
 systemctl daemon-reload
 systemctl restart docker.service 

// 遠程就可以登錄
 docker login -u admin -p Harbor12345 http://192.168.66.138

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

【2】下載私有倉庫
// 下載私有倉庫的鏡像
docker pull 192.168.66.138/myproject/cirros:v1

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

【3】上傳鏡像到私有倉庫 
// 先從官方倉庫下載nginx鏡像
docker pull nginx
// 給nginx鏡像打標籤
docker tag nginx:latest 192.168.66.138/myproject/nginx:v2
// 上傳鏡像到私有倉庫
docker push 192.168.66.138/myproject/nginx:v2

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

【4】驗證
// 在 harbor 界面驗證鏡像是否上傳到私有倉庫。

私有倉庫 Harbor 的搭建

總結

在搭建過程中,要注意客戶端遠程登錄私有倉庫時,必須先在docker.service文件裏指明倉庫地址,然後加載並重啓docker,之後才能登錄。

五、Harbor 管理維護

5.1、修改 Harbor.cfg 配置文件

// 更改 Harbour 的配置文件時,請先停止現有的 Harbour 實例並更新 Harbor.cfg;然

後運行 prepare 腳本來填充配置;最後重新創建並啓動 Harbour 的實例。

// 在 Harbor服務器上修改
【1】 關閉所有容器
cd /usr/local/harbor
docker-compose down -v

私有倉庫 Harbor 的搭建

【2】修改參數文件
cd /usr/local/harbor
 vim harbor.cfg    // 修改配置參看實際需求

【3】重新加載配置文件,重啓服務
//目錄下有prepare腳本,下一步執行
./prepare 
systemctl restart docker       // 重啓docker服務
docker-compose up -d           // 啓動容器服務

私有倉庫 Harbor 的搭建

【4】去harbor界面,創建新用戶:test-wanglu,稍後使用

私有倉庫 Harbor 的搭建

私有倉庫 Harbor 的搭建

在客戶端,使用新用戶遠程登錄harbor,來進行下載和上傳鏡像

【1】使用新用戶遠程登錄harbor,來進行下載和上傳鏡像
// 首先退出已登陸的賬號
docker logout http://192.168.66.138

// 使用新的賬戶登錄
 docker login http://192.168.66.138

私有倉庫 Harbor 的搭建

【2】下載 harbor 倉庫內的鏡像
 docker pull 192.168.66.138/myproject/cirros:v1

私有倉庫 Harbor 的搭建

【3】 上傳鏡像
// 改成私有倉庫的專有標籤
docker tag nginx:latest 192.168.66.138/myproject/nginx:v1

// 上傳鏡像到私有倉庫
docker push 192.168.66.138/myproject/nginx:v1

私有倉庫 Harbor 的搭建

查看UI界面顯示上傳成功!

私有倉庫 Harbor 的搭建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章