1、概述
Harbor是由VMware公司開源的企業級的Docker Registry管理項目,它包括權限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能。
Harbor 的所有組件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必須 > = 1.10.0 docker-compose >= 1.6.0
Harbor的目標是幫助用戶迅速搭建一個企業級的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)
1.1 架構圖
Harbor的每個組件都是以Docker容器的形式構建的,可以使用Docker Compose來進行部署。如果環境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。
Harbor大概需要以下幾個容器組成:ui(Harbor的核心服務)、log(運行著rsyslog的容器,進行日志收集)、mysql(由官方mysql鏡像構成的數據庫容器)、Nginx(使用Nginx做反向代理)、registry(官方的Docker registry)、adminserver(Harbor的配置數據管理器)、jobservice(Harbor的任務管理服務)、redis(用于存儲session)。
Harbor是一個用于存儲和分發Docker鏡像的企業級Registry服務器,整體架構還是很清晰的。架構圖如下:
2、安裝docker
Harbor要依賴Docker,所以要先安裝,見:Ubuntu20.04安裝Docker
3、下載Harbor
訪問harbor release page,下載Harbor軟件tgz壓縮包。
4、解壓
tar -zxvf harbor-offline-installer-v2.9.4.tgz
解壓后出現一個 hardor 的文件夾,進去之后查看
此時還沒有 harbor.yml 和 docker-compose.yml,復制一份harbor.yml.tmpl ,然后進行修改
cp harbor.yml.tmpl harbor.yml
主要改下面地方,填上hostname,port,注釋掉https相關
5、安裝
在當前 harbor 目錄下執行./install.sh
等待安裝成功。會出現上面提到的 docker-compose.yml文件,里面包含了harbor依賴的鏡像和對應容器創建的信息。
6、安裝docker-compose
# 安裝
curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 授權
chmod +x /usr/local/bin/docker-compose
7、執行docker-compose
在harbor的目錄下執行以下命令
# 啟動
docker-compose up -d# 停止
docker-compose down
啟動后使用docker ps -a
查看harbor相關容器啟動情況(總計9個):
8、訪問
根據上面的配置的IP,訪問 http://172.28.168.223:5180
默認用戶 和登錄密碼 可以從 harbor.yml 中找到,官網有個地方也有說明
admin / Harbor12345
登錄成功
9、使用
9.1 創建用戶和項目
首先有一個 public 的 library 項目,在里面創建對應的用戶即可pull 和 push鏡像,也可以創建其它項目
9.2 docker配置 harbor
結合docker實現鏡像上傳和下載,在/etc/docker/daemon.json
添加以下內容
IP為harbor的IP地址和端口,端口如果是80可省略
# 倉庫IP地址和端口,或者是域名,要加上http或https
"insecure-registries":["http://172.28.168.223:5180"],"registry-mirrors":["http://172.28.168.223:5180"]
registry-mirrors
:配置的是阿里云鏡像加速,該文的問題不需要配置該項insecure-registries
:允許 Docker 客戶端連接到沒有使用 HTTPS 或使用了自簽名證書的 Docker 鏡像倉庫
registry-mirrors
:必須配置你的harbor倉庫!!!否則可能造成,docker login是成功的,但是push鏡像時出現相同的問題
重啟docker:service docker restart
重啟harbor
# 停止
docker-compose down# 啟動
docker-compose up -d
9.3 登錄倉庫
docker login -u 'admin' -p 'Harbor12345' http://172.28.168.223:5180
9.2 上傳鏡像到harbor
在上傳鏡像前,需要為鏡像打上標簽,命令如下:
docker tag <image_name> <harbor_host>/<project_name>/<image_name>:<tag>
以redis鏡像為例:
docker tag redis:5.0.10 172.28.168.223:5180/library/redis:5.0.10
上傳鏡像,命令如下:
docker push <harbor_host>/<project_name>/<image_name>:<tag>
上傳redis鏡像到harbor
docker push 172.28.168.223:5180/library/redis:5.0.10
登錄harbor控制臺查看,在library項目下有redis鏡像
9.3 harbor拉取鏡像
先刪除上面本地的redis鏡像172.28.168.223:5180/library/redis:5.0.10
docker rmi 172.28.168.223:5180/library/redis:5.0.10
拉取鏡像的命令
# image_name是要拉取的鏡像名稱,project_name是Harbor中的項目名稱,tag是鏡像的版本號
docker pull <harbor_host>/<project_name>/<image_name>:<tag>
拉取redis鏡像
docker pull 172.28.168.223:5180/library/redis:5.0.10