一、Harbor簡介
-
雖然Docker官方提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的。
-
Harbor是由VMware公司開源的企業級的Docker Registry管理項目,相比docker官方擁有更豐富的權限權利和完善的架構設計,適用大規模docker集群部署提供倉庫服務。
-
它主要提供 Dcoker Registry 管理界面UI,可基於角色訪問控制,鏡像復制, AD/LDAP 集成,日志審核等功能,完全的支持中文。

二、Harbor 的主要功能
- 基於角色的訪問控制
用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權限。
- 基於鏡像的復制策略
鏡像可以在多個Registry實例中復制(可以將倉庫中的鏡像同步到遠程的Harbor,類似於MySQL主從同步功能),尤其適合於負載均衡,高可用,混合雲和多雲的場景。
- 圖形化用戶界面
用戶可以通過瀏覽器來瀏覽,檢索當前Docker鏡像倉庫,管理項目和命名空間。
- 支持 AD/LDAP
Harbor可以集成企業內部已有的AD/LDAP,用於鑒權認證管理。
- 鏡像刪除和垃圾回收
Harbor支持在Web刪除鏡像,回收無用的鏡像,釋放磁盤空間。image可以被刪除並且回收image占用的空間。
- 審計管理
所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。
- RESTful API
RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟件集成變得更容易。
- 部署簡單
提供在線和離線兩種安裝工具, 也可以安裝到vSphere平台(OVA方式)虛擬設備。
Harbor 的所有組件都在 Docker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
注意: 由於 Harbor 是基於 Docker Registry V2 版本,所以 docker 版本必須 > = 1.10.0 docker-compose >= 1.6.0
三、Harbor 架構組件
架構組件圖:
1、Proxy:反向代理工具
2、Registry:負責存儲docker鏡像,處理上傳/下載命令。對用戶進行訪問控制,它指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token,registry會通過公鑰對token進行解密驗證。
3、Core service:Harbor的核心功能:
- UI:圖形界面
- Webhook:及時獲取registry上image狀態變化情況,在registry上配置 webhook,把狀態變化傳遞給UI模塊。
- Token服務:復雜根據用戶權限給每個docker push/p/ull命令簽發token。Docker客戶端向registry服務發起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向registry進行請求。
4、Database:提供數據庫服務,存儲用戶權限,審計日志,docker image分組信息等數據
5、Log collector:為了幫助監控harbor運行,復責收集其他組件的log,供日后進行分析
四、Harbor 部署
4.1、環境准備
兩台虛擬機
harbor (harbor服務端,用於搭建私有倉庫)
20.0.0.10 docker-ce、docker-compose(必須安裝)、Harbo
client(客戶端,用於遠程訪問私有倉庫) 20.0.0.30 docker-ce
4.2、安裝compose 和 harbor
-rw-r--r--. 1 root root 533765727 12月 1 18:58 harbor-offline-installer-v1.2.2.tgz 將安裝包解壓縮 -rw-r--r--. 1 root root 10867152 12月 1 19:02 docker-compose tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ cd /usr/local/harbor/ #可以查看到install.sh腳本

1 上傳docker-compose到/root目錄下 2 3 將docker-compose移動到/usr/local/bin 4 [root@server1 ~]# cp -p docker-compose /usr/local/bin/ 5 [root@server1 ~]# chmod +x /usr/local/bin/docker-compose
對harbor配置文件進行修改 vi harbor.cfg hostname = 20.0.0.10 #本機ip地址 //啟動harbor,install.sh會直接調用docker-compose.yml,進行編排容器服務 sh /usr/local/harbor/install.sh


//到這里,harbor安裝已經完成,可以查看Harbor啟動的鏡像和容器服務 docker images #查看鏡像 docker ps -a #查看容器
也可用docker-compose ps查看容器狀態,但是需要在/usr/local/harbor目錄下執行 [root@harbor harbor]# pwd /usr/local/harbor [root@harbor harbor]# docker-compose ps #可以看到安裝了7個容器
4.3、harbor 圖形化管理
在harbor.cfg文件里可以找到登錄UI界面的默認用戶、密碼。

打開瀏覽器輸入harbor的IP地址登錄UI界面。用賬戶密碼進行登錄


添加用戶

4.4、推送鏡像
此時可使用 Docker 命令在本地通過 127.0.0.1 來登錄和推送鏡像。默認情況下,Register 服務器在端口 80 上偵聽。
[root@node1 harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1 WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
[root@node1 harbor]# docker pull httpd #下載鏡像 給鏡像打標簽 [root@node1 harbor]# docker tag httpd:latest 127.0.0.1/stf/httpd:v1 [root@node1 harbor]# docker push 127.0.0.1/test/httpd:v1 The push refers to repository [127.0.0.1/test/httpd] c74375f55aa8: Pushed 211b9be55a20: Pushed aa0b3e4b6d3b: Pushed 540171a10c83: Pushed f5600c6330da: Pushed v1: digest: sha256:4c7c70926e2f2e10a9f78b63f344c83ae97a22c7fefa96afed46c63e4e607c51 size: 1366
進入網頁中查看鏡像是否上傳成功

4.5、嘗試其他服務器登錄Harbor倉庫
上面都是本地操作,嘗試在其他客戶端嘗試登錄,會出現如下報錯
[root@server3 ~]# docker login -u admin -p Harbor12345 http://20.0.0.10WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get https://20.0.0.10/v2/: dial tcp 20.0.0.10:443: connect: connection refused
解決方法
[root@server3 ~]# vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 20.0.0.10 --containerd=/run/containerd/containerd.sock #添加服務器的ip [root@server3 ~]# systemctl daemon-reload [root@server3 ~]# systemctl restart docker
重新登錄,登錄成功
[root@server3 ~]# docker login -u admin -p Harbor12345 http://20.0.0.10WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
下載鏡像
[root@server3 ~]# docker pull tomcat 對鏡像進行打標簽 [root@server3 ~]# docker tag tomcat:latest 20.0.0.10/test/tomcat:v1 [root@server3 ~]# docker push 20.0.0.10/test/tomcat:v1 #上傳鏡像
登錄網頁進行查看,鏡像是否上傳成功

4.6、harbor的關閉與開啟
關閉(修改配置文件必須先關閉服務) [root@node1 harbor]# docker-compose down -v Stopping harbor-jobservice ... done Stopping nginx ... done Stopping harbor-ui ... done Stopping harbor-adminserver ... done Stopping harbor-db ... done Stopping registry ... done Stopping harbor-log ... done Removing harbor-jobservice ... done Removing nginx ... done Removing harbor-ui ... done Removing harbor-adminserver ... done Removing harbor-db ... done Removing registry ... done Removing harbor-log ... done Removing network harbor_harbor 查看容器的狀態 [root@node1 harbor]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 再次開始harbor [root@node1 harbor]# docker-compose up -d Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating harbor-adminserver ... done Creating registry ... done Creating harbor-db ... done Creating harbor-ui ... done Creating nginx ... done Creating harbor-jobservice ... done [root@node1 harbor]# 重新查看容器的狀態 [root@node1 harbor]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e89e37ae455 vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 37 seconds ago Up 35 seconds harbor-jobservice 1ceaa3c7bdac vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 37 seconds ago Up 35 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx 6f70d6b9379b vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 37 seconds ago Up 36 seconds harbor-ui 348dc4a931e8 vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 38 seconds ago Up 36 seconds 3306/tcp harbor-db 519de971e723 vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 38 seconds ago Up 36 seconds 5000/tcp registry 47b28cc9a461 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 38 seconds ago Up 36 seconds harbor-adminserver 65c16de60a34 vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 38 seconds ago Up 37 seconds 127.0.0.1:1514->514/tcp harbor-log
五、創建harbor用戶



設為管理員

在項目中添加成員


5.1、用stf用戶登錄
先退出登錄 [root@node1 harbor]# docker logout 20.0.0.10 Removing login credentials for 20.0.0.10 用stf用戶進行登錄 [root@node1 harbor]# docker login -u stf -p AAASSSddd123 20.0.0.10 WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded 從私有倉庫中下載鏡像文件 [root@node1 harbor]# docker pull 20.0.0.10/test/tomcat:v1 v1: Pulling from test/tomcat 756975cb9c7e: Pull complete d77915b4e630: Pull complete 5f37a0a41b6b: Pull complete 96b2c1e36db5: Pull complete 27a2d52b526e: Pull complete a867dba77389: Pull complete 0939c055fb79: Pull complete 0b0694ce0ae2: Pull complete 81a5f8099e05: Pull complete c3d7917d545e: Pull complete Digest: sha256:4527a552568f7d706173d8065278cd1abaa7edce186a149a5a2de251e12e6c3c Status: Downloaded newer image for 20.0.0.10/test/tomcat:v1 20.0.0.10/test/tomcat:v1 拉取成功

5.2、移除Harbor 服務器同時保留鏡像數據和數據庫
[root@node1 harbor]# docker-compose down -v Stopping harbor-jobservice ... done Stopping nginx ... done Stopping harbor-ui ... done Stopping harbor-db ... done Stopping registry ... done Stopping harbor-adminserver ... done Stopping harbor-log ... done Removing harbor-jobservice ... done Removing nginx ... done Removing harbor-ui ... done Removing harbor-db ... done Removing registry ... done Removing harbor-adminserver ... done Removing harbor-log ... done Removing network harbor_harbor 如需重新部署,需要移除 Harbor 服務容器全部數據,持久數據,如鏡像,數據庫等在宿主機的/data/目錄下,日志在宿主機的 1 /var/log/Harbor/目錄下。 2 rm -rf /data/database/ 3 rm -rf /data/registry/
