隨着對容器的不斷深刻,本地私有的registry已經不夠知足用戶的需求,很差對不一樣的用戶,如開發,測試,運維的職能進行區分,每每不一樣的項目鏡像,卻存放在一塊兒,顯得也太過雜亂,也沒有一個web管理界面,不方便運維人員對容器倉庫進行管理,這個時候Harbor的使用就很是有必要了,它可以幫助運維人員高效的管理鏡像,對鏡像進行同步複製,對用戶進行不一樣權限的管控,開發,管理員,測試等,不一樣用戶具備不一樣的權限,開發能夠對鏡像進行拉取,推送,測試只能對鏡像進行拉取,管理員則能夠進行任何操做。Harbor還能夠針對不一樣項目進行獨立的處理,如項目一有幾名開發成員,項目二有幾名開發成員,是否須要備份鏡像,任何操做都會在Harbor的web日誌保存,能夠進行查看。node
架構介紹linux
1)主要組件nginx
Harbor在架構上主要由6個組件構成:git
Proxy:Harbor的registry, UI, token等服務,經過一個前置Nginx的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不一樣的服務。github
Registry: 負責儲存Docker鏡像,並處理docker push/pull 命令。因爲咱們要對用戶進行訪問控制,即不一樣用戶對Docker image有不一樣的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶 一個合法的token, Registry會經過公鑰對token 進行解密驗證。web
Core services: 這是Harbor的核心功能,主要提供如下服務:redis
UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 並對用戶進行受權。docker
webhook:爲了及時獲取registry 上image狀態變化的狀況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。數據庫
token 服務:負責根據用戶權限給每一個docker push/pull命令簽發token. Docker 客戶端向Regiøstry服務發起的請求,若是不包含token,會被重定向到這裏,得到token後再從新向Registry進行請求。vim
Database:爲core services提供數據庫服務,負責儲存用戶權限、審計日誌、Docker image分組信息等數據。
Job Services:提供鏡像遠程複製功能,能夠把本地鏡像同步到其餘Harbor實例中。
Log collector:爲了幫助監控Harbor運行,負責收集其餘組件的log,供往後進行分析。
各個組件之間的關係以下圖所示:
上面的六個組件都是由鏡像的形式存在在官網上下載壓縮包後解壓安裝便可。
Harbor安裝部署
兩臺harbor主機,實現鏡像同步
harbor1 node-2:192.168.175.130
harbor2 node-3:192.168.175.131
1.安裝docker環境
# yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm -y
# yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm -y
# systemctl start docker && systemctl enable docker
2.安裝docker-compose
harbor須要基於docker-compose插件進行安裝,管理
# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
3.安裝harbor
在GitHub上找到下載地址並下載
# tar xf harbor-offline-installer-v1.6.0.tgz
# cd harbor
# vim harbor.cfg //修改hostname,修改文當前主機IP
# ./prepare //預處理
# ./install.sh //執行安裝操做
導入鏡像
兩臺harbor均安裝完成,以下圖可知harbor正常啓動的容器組件,nginx,jobserver,ui,redis,registry,db,log
使用瀏覽器訪問192.168.175.130,user:admin passwd:Harbor12345 密碼保存在harbor.cfg配置文件中
主控制面板
harbor在建立新用戶,能夠對用戶分配項目,該用戶在這個項目下的權限,也由管理員進行分配
項目管理員能夠對項目進行全部操做,開發人員能夠對項目中的鏡像進行拉取pull,上傳push操做,訪客則是針對測試人員,只能進行拉取操做pull
兩臺harbor主機同步鏡像數據
在兩臺harbor主機同時建立以對方爲目標URL的倉庫,帳號密碼爲對方主機的admin用戶密碼
建立項目test
配置複製規則
複製的源項目爲test,目標倉庫爲192.168.175.131,即複製目標主機192.168.175.131的test項目中的鏡像,處罰模式爲即刻,也能夠定時,手動觸發
最後須要配置兩臺主機192.168.175.130,192.168.175.131的registry的insecure-registry,不然雙方沒法訪問對方的倉庫
測試,在192.168.175.130上傳鏡像到192.168.175.131的test項目,同步成功
上傳鏡像到harbor須要進行docker login操做,帳號密碼爲對應harbor中具備上傳權限的用戶,退出則爲docker logout 192.168.175.131
192.168.175.131 harbor倉庫上傳成功
192.168.175.130 harbor倉庫同步成功
harbor數據存儲在/data目錄下,能夠在harbor.cfg中修改
若是須要修改harbor.cfg配置文件,能夠經過docker-compose命令進行重啓
注意:須要在harbor工做目錄下,才能夠控制
關閉harbor
啓動harbor