Harbor私有倉庫部署與管理

2020-09-25 11:02:04

一、harbor簡介

Harbor是VMware公司的開源級的企業級DockerRegistry(倉庫)專案,專案地址為 https://github.com/vmware/harbor.
Harbor的目標是幫助使用者迅速搭建一個企業級的DockerRegistry服務。
Harbor以docker公司開源的registry為基礎,提供了管理UI,基於角色的存取控制(Role Based Access Control),AD/LDAP整合,以及審計紀錄檔(Auditlogging)等企業使用者需求的功能,同時還原生支援中文。
Harbor的每個元件都是以Docker容器的形式構建的,使用docker-compose來對它進行部署。用於部署Harbor的docker-compose模板位於/usr/local/bin/harbor/docker-compose.yml(自定義)
Docker harbor有視覺化的web管理介面,可以方便管理Docker映象,又提供了多個專案的映象許可權管理及控制功能

二、harbor的優勢

1、基於角色控制:使用者與Docker映象倉庫通過"專案"進行組織管理,一個使用者可以對多個映象倉庫在統一名稱空間(projec)裡有不同的許可權
2、圖形化使用者介面:使用者可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間
3、審計管理:所有這怒地映象倉庫的錯都可以被記錄追溯,用於審計管理
4、基於映象的複製策略:映象可以在多個Harbor範例之間進行復制。
5、支援LDAP認證:Harbor的使用者授權可以使用已經存在的使用者。
6、映象刪除和垃圾回收:image可以被刪除並且回收image佔用的空間。
7、簡單的部署功能:harbor提供了online、offline安裝,此外還提供了virtualappliance安裝
8、harbor和docker registry的關係:harbor實質上是對docker registry做了封裝,擴充套件了自己的業務模板。

三、harbor的簡易架構

harbor主要有6大模組,預設的每個harbor的元件都被封裝成一個docker container,所以可以通過compose來部署harbor,總共分為8個容器執行,通過docker-compose ps來檢視

在這裡插入圖片描述

●Proxy
  通過以一個前置的反向代理統一接收瀏覽器、Docker使用者端的請求,並將請求轉發給後端不同的服務
●Registry
  負載儲存Docker映象,並處理docker push/pull命令
●Core services
  Harbor的核心功能,包括UI、webhook、token服務
●Database
  為core services提供資料庫服務
●Log collector
  負責收集其他元件的log,供日後進行分析

四、部署harbor服務

1.確保docker-compose已能使用
[root@localhost ~]# mv docker-compose /usr/local/bin/
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
2.將harbor-offline-installer-v1.2.2.tgz軟體包上傳到/root目錄下,解壓到/usr/local/目錄下
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
3. 設定 Harbor 引數檔案
vim /usr/local/harbor/harbor.cfg
//5 hostname = 14.0.0.20
4.啟動 Harbor
[root@localhost ~]# cd /usr/local/harbor/
[root@localhost harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
[root@localhost harbor]# sh install.sh  
5. 檢視 Harbor 啟動映象
//檢視映象 docker images
//檢視容器 docker ps -a
//檢視compose編排的容器 docker-compose ps
6.開啟瀏覽器存取 http://14.0.0.20的管理頁面
預設的管理員使用者名稱和密碼是 admin/Harbor12345

7.新增專案並且填寫名稱 新增專案並且填寫名稱
在這裡插入圖片描述

新建專案myimages
在這裡插入圖片描述

此時可使用 Docker 命令在本地通過 127.0.0.1 來登入和推播映象。預設情況下,
Register 伺服器在埠 80 上偵聽。

//登入 docker login -u admin -p Harbor12345 http://127.0.0.1
//下載映象進行測試 下載映象進行測試 
docker pull nginx
//映象打標籤 
docker tag nginx 127.0.0.1/myimages/nginx:v1
//上傳映象到 上傳映象到 Harbor 
docker push 127.0.0.1/myimages/nginx:v1

以上操作都是在 Harbor 伺服器本地操作。如果其他使用者端上傳映象到 Harbor,就會報如下錯誤。出現這問題的原因 Docker Registry 互動預設使用的是 HTTPS,但是搭建私有映象預設使用的是 HTTP 服務,所以與私有映象互動時出現以下錯誤。

[root@localhost ~]# docker login -u admin -p Harbor12345 http://14.0.0.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://14.0.0.20/v2/: dial tcp 14.0.0.20:443: connect: connection refused

如何解決:

[root@client ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -- insecure-registry 14.0.0.30 -- containerd=/run/containerd/containerd.sock
[root@client ~]# systemctl daemon-reload 
[root@client ~]# systemctl restart docker
[root@client ~]# docker login -u admin -p Harbor12345 http://14.0.0.20

[root@localhost ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
14.0.0.20/myimages/nginx   v1                  7e4d58f0e5f3        13 days ago         133MB
[root@localhost ~]# docker tag 14.0.0.20/myimages/nginx:v1 14.0.0.20/myimages/nginx:v2
[root@localhost ~]# docker push 14.0.0.20/myimages/nginx:v2

在這裡插入圖片描述

五、維護管理harbor

可以使用 docker-compose 來管理 Harbor。一些有用的命令如下所示,必須在與
docker-compose.yml 相同的目錄中執行。
修改 Harbor.cfg 組態檔
要更改 Harbour 的組態檔時,請先停止現有的 Harbor 範例並更新 Harbor.cfg;然
後執行 prepare 指令碼來填充設定;最後重新建立並啟動 Harbor 的範例。

1.停止現有的 Harbor 範例
docker-compose down -v
[root@localhost harbor]# pwd
/usr/local/harbor
[root@localhost harbor]# ls
common                     docker-compose.yml     harbor.v1.2.2.tar.gz  NOTICE
docker-compose.clair.yml   harbor_1_1_0_template  install.sh            prepare
docker-compose.notary.yml  harbor.cfg             LICENSE               upgrade
2.更新 Harbor.cfg
[root@localhost harbor]# vim Harbor.cfg
3.執行 prepare 指令碼來填充設定
[root@localhost harbor]# ./prepare
4.重新建立並啟動 Harbor 的範例
如果出現如下報錯: docker-compose up -d
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables -- wait -t nat -I DOCKER -i br-25094fc09b3c -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
解決方法:關閉防火牆後, 解決:關閉防火牆後, docker需要重新啟動 
systemctl restart docker 
docker-compose up -d

//建立使用者chen,並將其建立為myimages專案的開發人員
在這裡插入圖片描述
在這裡插入圖片描述

#在使用者端上操作:使用新建立的開發人員使用者登入

[root@localhost ~]# docker logout 14.0.0.20
Removing login credentials for 14.0.0.20
[root@localhost ~]# docker login 14.0.0.20
Username: chen      #使用新建立的開發人員使用者
Password:
[root@localhost ~]# docker pull 14.0.0.20/myimages/nginx:v1
v1: Pulling from myimages/nginx
Digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19
Status: Image is up to date for 14.0.0.20/myimages/nginx:v1
14.0.0.20/myimages/nginx:v1
[root@localhost ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
14.0.0.20/myimages/nginx   v1                  7e4d58f0e5f3        13 days ago         133MB
14.0.0.20/myimages/nginx   v2                  7e4d58f0e5f3        13 days ago         133MB

#移除 Harbor 服務容器同時保留映象資料/資料庫

//在 Harbor伺服器上操作 docker-compose down -v
Stopping nginx ... done
Stopping harbor-jobservice ... done
Stopping harbor-ui ... done
Stopping registry ... done
Stopping harbor-db ... done
...省略內容

如需重新部署,需要移除 Harbor 服務容器全部資料
持久資料,如映象,資料庫等在宿主機的/data/目錄下,紀錄檔在宿主機的/var/log/Harbor/目錄下。

rm -rf /data/database/
rm -rf /data/registry/