Docker-------私有倉庫 Harbor 的搭建

huhaiyangFIVE發表於2020-12-04

一、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服務端,用於搭建私有倉庫)
    10.0.0.30 docker-ce、docker-compose(必須安裝)、Harbor

  • client(客戶端,用於遠端訪問私有倉庫) 10.0.0.40 docker-ce

4.2、安裝compose 和 harbor

#線上下載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/

#在harbor伺服器上,線上下載harbor安裝包
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

#解壓到/usr/local中
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

[root@localhost bin]# cd /usr/local/harbor/    #在下圖中可以看到install.sh指令碼,還有.yml結尾的編排檔案

在這裡插入圖片描述

#修改harbor的引數檔案harbor.cfg
vi harbor.cfg
hostname = 10.0.0.30    ## 第5行修改為harbor伺服器IP地址,不能使用 localhost 或者127.0.0.1

#啟動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地址10.0.0.30登入UI介面。
在這裡插入圖片描述
在這裡插入圖片描述
在網頁harbor上新建一個私有專案project ,用來測試上傳、下載映象
在這裡插入圖片描述

#登入harbor的字元介面
docker login -u admin -p Harbor12345 http://127.0.0.1/	

#先從官方公有倉庫下載一個映象
docker pull nginx	

#修改特定的標籤,這個標籤不能改,127.0.0.1代表本地地址,project指定專案,nginx:v1指定具體映象名稱和版本
docker tag nginx:latest 127.0.0.1/project/nginx:v1	

#上傳映象到私有倉庫
docker push 127.0.0.1/project/nginx:v1 

#注意:在harbor伺服器上登入、定製tag、上傳映象都需要使用127.0.0.1,而不可以使用10.0.0.30,否則會出現錯誤

在這裡插入圖片描述
在這裡插入圖片描述

4.4、客戶端遠端訪問管理 harbor

#必須要先指定私有倉庫的地址
vi /usr/lib/systemd/system/docker.service
#新增
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.0.30 --containerd=/run/containerd/containerd.sock 
 
#重啟服務
[root@client ~]# systemctl daemon-reload 
[root@client ~]# systemctl restart docker.service 

在這裡插入圖片描述

#登入
[root@client ~]# docker login -u admin -p Harbor12345 http://10.0.0.30

在這裡插入圖片描述

4.5、客戶端下載、上傳映象到私有倉庫

1、下載私有倉庫的映象

[root@client ~]# docker pull 10.0.0.30/project/nginx:v1

在這裡插入圖片描述
2、上傳映象到私有倉庫

#先從官方倉庫下載nginx映象
[root@localhost system]# docker pull nginx

#給nginx映象打標籤
[root@localhost system]# docker tag nginx:latest 10.0.0.30/project/nginx:v2
[root@localhost system]# docker images

#上傳映象到私有倉庫
[root@localhost ~]# docker push 10.0.0.30/project/nginx:v2
The push refers to repository [10.0.0.30/project/nginx]
7e914612e366: Layer already exists 
f790aed835ee: Layer already exists 
850c2400ea4d: Layer already exists 
7ccabd267c9f: Layer already exists 
f5600c6330da: Layer already exists 
v2: digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49 size: 1362

我們在 harbor 介面驗證映象是否上傳到私有倉庫。
在這裡插入圖片描述

4.6、總結

在搭建過程中,要注意客戶端遠端登入私有倉庫時,必須先在docker.service檔案裡指明倉庫地址,然後載入並重啟docker,之後才能登入。
否則出現下圖中的報錯。
在這裡插入圖片描述

vi /usr/lib/systemd/system/docker.service
#新增
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.0.30 --containerd=/run/containerd/containerd.sock 
 
#重啟服務
[root@client ~]# systemctl daemon-reload 
[root@client ~]# systemctl restart docker.service 

五、Harbor 管理維護

5.1、修改 Harbor.cfg 配置檔案

  • 修改harbor.cfg配置檔案,先停止現有的Harbor例項並更新harbor.cfg中的配置,然後再執行prepare腳重新載入配置,最後重新建立並且啟動harbor的例項。

詳細步驟如下:
1、關閉所有容器

[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# docker-compose down -v

在這裡插入圖片描述
2、修改引數檔案

[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# vi harbor.cfg         ##修改配置參看實際需求
[root@localhost harbor]# ls          #目錄下有prepare指令碼,下一步執行
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

3、重新載入配置檔案,重啟服務
[root@harbor harbor]# ./prepare 	
[root@server3 harbor]# systemctl daemon-reload 	
[root@harbor harbor]# systemctl restart docker 	   ##重啟docker服務
[root@harbor harbor]# docker-compose up -d     	   ##啟動容器服務
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db          ... done
Creating registry           ... done
Creating harbor-adminserver ... done
Creating harbor-ui          ... done
Creating nginx              ... done
Creating harbor-jobservice  ... done

5.2、UI 介面操作

建立新使用者 test-tom,記住建立的密碼,稍後使用 。
在這裡插入圖片描述
在專案裡新增新的使用者成員。
在這裡插入圖片描述
在client上,使用新使用者遠端登入harbor,來進行下載和上傳映象

#首先退出已登陸的賬號
[root@localhost ~]# docker logout http://10.0.0.30
Removing login credentials for 10.0.0.30

#使用新的賬戶登入
[root@client ~]# docker login http://10.0.0.30

在這裡插入圖片描述
下載 harbor 倉庫內的映象
在這裡插入圖片描述
上傳映象

1、改成私有倉庫的專有標籤
[root@localhost ~]# docker tag 10.0.0.30/project/nginx:v1 10.0.0.30/project/nginx:v3
2、上傳映象到私有倉庫
[root@localhost ~]# docker push 10.0.0.30/project/nginx:v3

在這裡插入圖片描述
檢視UI介面顯示上傳成功!
在這裡插入圖片描述

相關文章