您好,登錄后才能下訂單哦!
Harbor 是一個用于存儲和分發 Docker 鏡像的企業級 Registry 服務器, 通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源 Docker Distribution。 作為一個企業級私有 Registry 服務器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構建和運行環境傳輸鏡像的效率。 Harbor 支持安裝在多個 Registry 節點的鏡像資源復制,鏡像全部保存在私有 Registry 中,確保數據和知識產權在公司內部網絡中管控。 另外,Harbor 也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
Harbor 是由 VMware 中國研發團隊負責開發的開源企業級 Docker Registry, 不僅解決了我們直接使用 Docker Registry 的功能缺失, 更解決了我們在生產使用 Docker Registry 面臨的高可用、鏡像倉庫直接復制、鏡像倉庫性能等運維痛點。
(1)基于角色的訪問控制 :用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權限。
(2)鏡像復制 : 鏡像可以在多個Registry實例中復制(同步)。尤其適合于負載均衡,高可用,混合云和多云的場景。
(3)圖形化用戶界面 : 用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
(4)AD/LDAP 支持 : Harbor可以集成企業內部已有的AD/LDAP,用于鑒權認證管理。
(5)審計管理 : 所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
(6)國際化 : 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。
(7)RESTful API : RESTful API 提供給管理員對于Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
(8)部署方便 : 提供在線和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬設備。
(1)Proxy:Harbor的registry, UI, token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,并將請求轉發給后端不同的服務。
(2)Registry: 負責儲存Docker鏡像,并處理docker push/pull 命令。由于我們要對用戶進行訪問控制,即不同用戶對Docker image有不同的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會通過公鑰對token 進行解密驗證。
(3)Core services: 這是Harbor的核心功能,主要提供以下服務:
1)UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 并對用戶進行授權。
2)webhook:為了及時獲取registry 上image狀態變化的情況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。
3)token 服務:負責根據用戶權限給每個docker push/pull命令簽發token. Docker 客戶端向Regi?stry服務發起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向Registry進行請求。
(4)Database:為core services提供數據庫服務,負責儲存用戶權限、審計日志、Docker image分組信息等數據。
(5)Job Services:提供鏡像遠程復制功能,可以把本地鏡像同步到其他Harbor實例中。
(6)Log collector:為了幫助監控Harbor運行,負責收集其他組件的log,供日后進行分析。
各個組件之間的關系如下圖所示:
Harbor的每個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打開這個模板文件,發現Harbor是由7個容器組成的;
(1)nginx:nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,所以開放https的443端口,它將流量分發到后端的ui和正在docker鏡像存儲的docker registry。
(2)harbor-jobservice:harbor-jobservice 是harbor的job管理模塊,job在harbor里面主要是為了鏡像倉庫之前同步使用的;
(3)harbor-ui:harbor-ui是web管理頁面,主要是前端的頁面和后端CURD的接口;
(4)registry:registry就是docker原生的倉庫,負責保存鏡像。
(5)harbor-adminserver:harbor-adminserver是harbor系統管理接口,可以修改系統配置以及獲取系統信息。
(6)harbor-db:harbor-db是harbor的數據庫,這里保存了系統的job以及項目、人員權限管理。由于本harbor的認證也是通過數據,在生產環節大多對接到企業的ldap中;
(7)harbor-log:harbor-log是harbor的日志服務,統一管理harbor的日志。通過inspect可以看出容器統一將日志輸出的syslog。
這幾個容器通過Docker link的形式連接在一起,這樣在容器之間可以通過容器名字互相訪問。對終端用戶而言,只需要暴露proxy (即Nginx)的服務端口。
在網上下載docker-compose工具。
https://github.com/docker/compose/releases/tag/1.25.1-rc1
[root@docker02 ~]# tar -zxf docker-compose.tar.gz -C /usr/local/bin/
//解壓到命令目錄
[root@docker02 ~]# chmod +x /usr/local/bin/docker-compose
[root@docker02 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
//安裝依賴包
[root@docker02 ~]# docker-compose -v
//查看版本信息
docker-compose version 1.24.0, build 0aa59064
在網上下載harbor并安裝。
https://github.com/goharbor/harbor/releases
[root@docker02 ~]# tar -zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/
//導入harbor離線安裝包,解壓到/usr/
修改harbor配置文件,并執行自帶的安裝腳本
[root@docker02 ~]# cd /usr/local/harbor/
[root@docker02 harbor]#ls
[root@docker02 harbor]# vim harbor.cfg
hostname = 192.168.1.13 #13 改為本機IP地址
harbor_admin_password = Harbor12345 #harbor密碼
[root@docker02 harbor]# ./install.sh
//執行一下自帶的安裝腳本
在瀏覽器登陸一下harbor
http://192.168.1.13:80 用戶名:admin,密碼:Harbor12345
創建一個項目
修改docker配置文件,連接私有倉庫
[root@docker02 harbor]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.
13 #13行添加
[root@docker02 harbor]# systemctl daemon-reload
[root@docker02 harbor]# systemctl restart docker
//重啟docker
[root@docker02 harbor]# docker ps
//發現運行的容器少了很多
[root@docker02 harbor]# docker-compose start
//啟動harker的文件中的容器
登陸harbor
[root@docker02 harbor]# docker login -u admin -p Harbor12345 192.168.1.13
//登陸harbor
上傳鏡像到倉庫
[root@docker02 harbor]# docker tag centos:7 192.168.1.13/xgp/centos:7
//修改標簽
[root@docker02 harbor]# docker push 192.168.1.13/xgp/centos:7
//上傳鏡像
第二臺加入倉庫,測試下載
[root@docker02 harbor]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.
13 #13行添加
[root@docker02 harbor]# systemctl daemon-reload
[root@docker02 harbor]# systemctl restart docker
//重啟docker
登陸harbor
[root@docker02 harbor]# docker login -u admin -p Harbor12345 192.168.1.13
//登陸harbor
下載剛剛上傳的鏡像
[root@docker01 xxx]# docker pull 192.168.1.13/xgp/centos:7
[root@docker01 xxx]# docker images
//查看本地鏡像
下載成功
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。