Docker容器技術——企業級鏡像倉庫harbor的部署和使用

1. 什麼是harbor

在這裏插入圖片描述

  • Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器。
  • 鏡像的存儲harbor使用的是官方的docker registry(v2命名是distribution)服務去完成。
  • harbor在docker distribution的基礎上增加了一些安全、訪問控制、管理的功能以滿足企業對於鏡像倉庫的需求。
  • harbor以docker-compose的規範形式組織各個組件,並通過docker-compose工具進行啓停。

2. 爲什麼使用harbor

docker的registry用本地存儲或者s3都可以的,harbor的功能是在此之上提供用戶權限管理、鏡像複製等功能,提高使用的registry的效率。Harbor的鏡像拷貝功能是通過docker registry的API去拷貝,這種做法屏蔽了繁瑣的底層文件操作、不僅可以利用現有docker registry功能不必重複造輪子,而且可以解決衝突和一致性的問題。

Harbor是VMware公司開源了企業級Registry項目, 其的目標是幫助用戶迅速搭建一個企業級的Docker registry服務。

它以Docker公司開源的registry爲基礎,額外提供瞭如下功能:

  • 基於角色的訪問控制(Role Based Access Control)
  • 基於策略的鏡像複製(Policy based image replication)
  • 鏡像的漏洞掃描(Vulnerability Scanning)
  • AD/LDAP集成(LDAP/AD support)
  • 鏡像的刪除和空間清理(Image deletion & garbage collection)
  • 友好的管理UI(Graphical user portal)
  • 審計日誌(Audit logging)
  • RESTful API
  • 部署簡單(Easy deployment)

3. harbor的架構

在這裏插入圖片描述

Harbor依賴的外部組件

  • Nginx(Proxy): Harbor的registry,UI,token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,並將請求轉發給後端不同的服務。
  • Registry v2: Docker官方鏡像倉庫, 負責儲存Docker鏡像,並處理docker push/pull命令。由於我們要對用戶進行訪問控制,即不同用戶對Docker image有不同的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker pull/push請求都要攜帶一個合法的token,,Registry會通過公鑰對token進行解密驗證。
  • Database(MySQL):爲core services提供數據庫服務,負責儲存用戶權限、審計日誌、Docker image分組信息等數據。

Harbor自己的組件

Core services(Admin Server): 這是Harbor的核心功能,主要提供以下服務:

  • UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 並對用戶進行授權。
  • webhook:爲了及時獲取registry 上image狀態變化的情況, 在Registry上配置webhook,把狀態變化傳遞給UI模塊。
  • Auth服務:負責根據用戶權限給每個docker push/pull命令簽發token. Docker 客戶端向Registry服務發起的請求,如果不包含token,會被重定向到這裏,獲得token後再重新向Registry進行請求。
  • API: 提供Harbor RESTful API
  • Replication Job Service:提供多個 Harbor 實例之間的鏡像同步功能。
  • Log collector:爲了幫助監控Harbor運行,負責收集其他組件的log,供日後進行分析。

4. 主要組件的彙總

組件 功能
Proxy 對應啓動組件nginx。它是一個nginx反向代理,代理Notary client(鏡像認證)、Docker client(鏡像上傳下載等)和瀏覽器的訪問請求(Core Service)給後端的各服務
UI(Core Service)對應啓動組件harbor-ui。底層數據存儲使用mysql數據庫,主要提供了四個子功能 UI:一個web管理頁面ui;API:Harbor暴露的API服務;Auth:用戶認證服務,decode後的token中的用戶信息在這裏進行認證;auth後端可以接db、ldap、uaa三種認證實現
Token服務(上圖中未體現) 負責根據用戶在每個project中的role來爲每一個docker push/pull命令issuing一個token,如果從docker client發送給registry的請求沒有帶token,registry會重定向請求到token服務創建token
Registry 對應啓動組件registry。負責存儲鏡像文件,和處理鏡像的pull/push命令。Harbor對鏡像進行強制的訪問控制,Registry會將客戶端的每個pull、push請求轉發到token服務來獲取有效的token
Admin Service 對應啓動組件harbor-adminserver。是系統的配置管理中心附帶檢查存儲用量,ui和jobserver啓動時候需要加載adminserver的配置
Job Sevice 對應啓動組件harbor-jobservice。負責鏡像複製工作的,他和registry通信,從一個registry pull鏡像然後push到另一個registry,並記錄job_log
Log Collector 對應啓動組件harbor-log。日誌彙總組件,通過docker的log-driver把日誌彙總到一起
Volnerability Scanning 對應啓動組件clair。負責鏡像掃描
Notary 對應啓動組件notary。負責鏡像認證
DB 對應啓動組件harbor-db,負責存儲project、 user、 role、replication、image_scan、access等的metadata數據

5. 部署harbor

5.1 準備工作

harbor git 地址:

https://github.com/goharbor/harbor

harbor支持k8s的helm安裝和本地安裝,這次的安裝方式是本地安裝,運行環境是 Rhel7.6。

(1)下載docker

yum install docker-ce -y
systemctl start docker
systemctl enable docker

(2)加密,生成證書

mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt

#做解析
vim /etc/hosts
172.25.1.1 server1 reg.westos.org

在這裏插入圖片描述

(3)拉取倉庫的鏡像

docker search registry
docker pull registry

(4)生成用戶的認證文件

mkdir auth
docker run --rm --entrypoint htpasswd registry -Bbn admin westos > auth/htpasswd
docker run --rm --entrypoint htpasswd registry -Bbn kai westos >> auth/htpasswd   #追加
cat auth/htpasswd 

(5)運行容器

docker run -d \
> --restart=always \
> --name registry \
> -v "$(pwd)"/certs:/certs \
>  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key \
> -p 443:443 \
> -v "$(pwd)"/auth:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
> registry

在這裏插入圖片描述

(6)拷貝證書到docker的配置目錄下

cd /etc/docker/
ls
mkdir -p certs.d/westos.org
cd certs.d/westos.org/
cp ~/certs/westos.org.crt .
ls
pwd
mv westos.org.crt ca.crt		#必須要命名爲ca.crt

在這裏插入圖片描述

5.2 部署docker-compose

在線安裝:

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

給docker-compose執行權限

chmod +x /usr/local/bin/docker-compose

檢查,運行docker-compose --version

docker-compose --version

在這裏插入圖片描述

5.3 harbor的下載和安裝

下載地址:https://github.com/goharbor/harbor/releases

#下載成功後解壓
tar zxf harbor-offline-installer-v1.10.1.tgz 
cd harbor/
ls

在這裏插入圖片描述

harbor.yml 就是harbor的配置文件,編輯harbor.yml,修改hostname、https證書路徑、admin密碼

vim harbor.yml

在這裏插入圖片描述

注意:每次修改完配置文件後都需要運行

./prepare 

在這裏插入圖片描述

啓動harbor

./install.sh

在這裏插入圖片描述

在這裏插入圖片描述

運行成功,docker ps 查看,可以看到服務已經起來了
在這裏插入圖片描述

常用管理命令

停止服務: docker-compose stop
開始服務: docker-compose start
重啓服務: docker-compose restart

注意:這些命令均要在harbor目錄下運行

6. 圖形化界面的使用

#在真機做解析
vim /etc/hosts
172.25.1.1 server1 reg.westos.org

瀏覽器訪問https://reg.westos.org:

在這裏插入圖片描述

輸入用戶名admin,密碼Harbor12345登陸:

在這裏插入圖片描述

在這裏插入圖片描述

新建一個項目,命名爲 wk,並設置訪問級別爲公開

在這裏插入圖片描述

在這裏插入圖片描述
這裏的項目就是一私有化的Docker鏡像倉庫

7. 本機鏡像上傳與下載測試

7.1 上傳測試

step1 修改Docker配置
docker 默認是按 https 請求的,修改文件 /etc/docker/daemon.json

vim /etc/docker/daemon.json

在這裏插入圖片描述
step2 重啓docker

systemctl daemon-reload 
systemctl restart docker

step3 製作鏡像

從 docker hub 上拉取一個ubuntu鏡像,再將其製作成一個私有鏡像

docker pull ubuntu
docker tag ubuntu:latest reg.westos.org/cl/ubuntu:latest

step4上傳測試

首先登陸私有庫

docker login reg.westos.org

在這裏插入圖片描述
接下來進行PUSH:

docker push reg.westos.org/cl/ubuntu

在這裏插入圖片描述

可以在網頁端查看結果:

在這裏插入圖片描述

在這裏插入圖片描述

7.2 下載測試

docker rmi reg.westos.org/cl/ubuntu		#刪除原來的鏡像
docker pull reg.westos.org/cl/ubuntu	#拉取鏡像

在這裏插入圖片描述

下載成功!

8. 遠程主機鏡像上傳與下載測試

8.1 上傳測試

準備另一臺虛擬機server2

首先安裝好docker,再做好解析:

vim /etc/hosts

在這裏插入圖片描述

daemon文件配置:

vim /etc/docker/daemon.json 

在這裏插入圖片描述

建立證書目錄,把crt證書放到/etc/docker/certs.d/harbor.dinginfo.com目錄下

mkdir -p /etc/docker/certs.d/reg.westos.org
cd /etc/docker/certs.d/harbor.dinginfo.com
cp ~/certs/westos.org.crt .

重啓docker

systemctl daemon-reload
systemctl restart docker

上傳測試:

docker login reg.westos.org

在這裏插入圖片描述

docker tag nginx:latest reg.westos.org/cl/nginx
docker push reg.westos.org/cl/nginx

在這裏插入圖片描述

網頁端查看:

在這裏插入圖片描述
上傳成功!

8.2 下載測試

docker pull reg.westos.org/cl/ubuntu

在這裏插入圖片描述

下載成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章