私有倉庫 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 架構組件
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/
【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個容器
【7】驗證
// http://192.168.66.138 的管理頁面
// 默認的管理員用戶名和密碼是 admin/Harbor12345
// 在網頁harbor上新建一個私有項目myproject,用來測試上傳、下載鏡像
在網頁harbor上新建一個私有項目myproject,用來測試上傳、下載鏡像
【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
在UI界面可以看到剛剛上傳的鏡像
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
【2】下載私有倉庫
// 下載私有倉庫的鏡像
docker pull 192.168.66.138/myproject/cirros:v1
【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
【4】驗證
// 在 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
【2】修改參數文件
cd /usr/local/harbor
vim harbor.cfg // 修改配置參看實際需求
【3】重新加載配置文件,重啓服務
//目錄下有prepare腳本,下一步執行
./prepare
systemctl restart docker // 重啓docker服務
docker-compose up -d // 啓動容器服務
【4】去harbor界面,創建新用戶:test-wanglu,稍後使用
在客戶端,使用新用戶遠程登錄harbor,來進行下載和上傳鏡像
【1】使用新用戶遠程登錄harbor,來進行下載和上傳鏡像
// 首先退出已登陸的賬號
docker logout http://192.168.66.138
// 使用新的賬戶登錄
docker login http://192.168.66.138
【2】下載 harbor 倉庫內的鏡像
docker pull 192.168.66.138/myproject/cirros:v1
【3】 上傳鏡像
// 改成私有倉庫的專有標籤
docker tag nginx:latest 192.168.66.138/myproject/nginx:v1
// 上傳鏡像到私有倉庫
docker push 192.168.66.138/myproject/nginx:v1
查看UI界面顯示上傳成功!