Docker容器harbor私有倉庫部署和管理
前言
之前我們搭建瞭本地私有倉庫,但是本地倉庫的管理和使用比較麻煩,個原生的私有倉庫並不好用,所以我們采用harbor私有倉庫,也叫私服,更加人性化。
一、Harbor概述
- Harbor是VMware公司開源的企業級Docker Registry項目,其目標是幫助用戶迅速搭建一個企業級的Docker Registry服務。
- Harbor以Docker 公司開源的Registry 為基礎,提供瞭圖形管理UI、基於角色的訪問控制(Role Based AccessControl)、AD/LDAI們成以心宙計日志(Auditlogging)等企業用戶需求的功能,同時還原生支持中文。
- Harbor的每個組件都是以Docker容器的形式構建的,使用docker-compose來對它進行部署。用於部署Harbor的docker-compose模板位於harbor/docker-compose.yml。
二、Harbor的特性
- 基於角色控制:用戶和倉庫都是基於項目進行組織的,而用戶在項目中可以擁有不同的權限。
- 基於鏡像的復制策略:鏡像可以在多個Harbor實例之間進行復制(同步)
- 支持LDAP/AD:Harbor可以集成企業內部已有的AD/LDAP(類似數據庫的一張表),用於對已經存在的用戶認證和管理。
- 鏡像刪除和垃圾回收:鏡像可以被刪除,也可以回收鏡像占用的空間。
- 圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,搜索鏡像倉庫以及對項目進行管理。
- 審計管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用於審計管理。
- 支持 RESTful API:RESTful API 提供給管理員對於Harbor更多的操控,使得與其它管理軟件集成變得更容易。
- Harbor和docker registry的關系:Harbor實質上是對docker registry做瞭封裝,擴展瞭自己的業務模板。
三、Harbor的構成
Harbor在架構上主要有proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services六個組件。
- Proxy:是一個nginx的前端代理,Harbor的Registry、UI、Token服務等組件,都處在nginx反向代理後邊。該代理將來自瀏覽器、docker clients的請求轉發到後端不同的服務上。
- Registry:負責存儲Docker鏡像,並處理Docker push/pull命令。由於要對用戶進行訪問控制,即不同用戶對Docker鏡像有不同的讀寫權限,Registry會指向一個Token服務,強制用戶的每次Docker pull/push請求都要攜帶一個合法的Token,Registry會通過公鑰對Token進行解密驗證。
- Core services:Harbor的核心功能,主要提供一下3個服務:
UI(harbor-ui):提供圖形化界面,幫助用戶管理Registry上的鏡像(image),並對用戶進行授權。
WebHook:為瞭及時獲取Registry上image狀態變化的情況,在Registry上配置WebHook,把狀態變化傳遞給UI模塊。
Token服務:負責根據用戶權限給每個Docker push/pull命令簽發Token.Docker客戶端向Registry服務發起的請求,如果不包含Docker Token,會被重定向到Token服務,獲得Token後再重新向Registry進行請求。
- Database(harbor-db):為core services提供數據庫服務,負責存儲用戶權限、審計日志、Docker鏡像分組信息等數據。Docker數據存儲在文件系統,但是分組信息存儲在數據庫。
- Job services:主要用於鏡像復制,本地鏡像可以被同步到遠程Harbor實例上。
- Log collector(harbor-log):負責收集其他組件的日志到一個地方。
Harbor 的每個組件都是以 Docker 容器的形式構建的,因此,使用 Docker Compose 來對它進行部署。
總共分為7個容器運行,通過在docker-compose.yml所在目錄中執行 docker-compose ps 命令來查看, 名稱分別為:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中 harbor-adminserver 主要是作為一個後端的配置數據管理,並沒有太多的其他功能。harbor-ui 所要操作的所有數據都通過 harbor-adminserver 這樣一個數據配置管理中心來完成
四、Harbor私有倉庫搭建
(1)安裝docker-compose
cd /opt #上傳docker-compose mv docker-compose /usr/bin chmod +x /usr/bin/docker-compose
(2)安裝harbor
rz harbor-offline-installer-v1.2.2.tgz tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/ #==配置Harbor參數文件== vim /usr/local/harbor/harbor.cfg #==第5行修改== hostname = 192.168.48.14
安裝harbor鏡像
sh /usr/local/harbor/install.sh
查看鏡像與容器:
docker ps docker images
物理機訪問server IP
192.168.48.14
用戶名:admin
密碼:Harbor12345
(3)新建項目
(4)鏡像推送
#登錄私有倉庫 docker login -u admin -p Harbor12345 http://192.168.48.14 vim /etc/docker/daemon.json { "insecure-registries": ["192.168.48.14"] }
#下載鏡像進行測試 docker pull nginx #鏡像打標簽 docker tag nginx 192.168.48.14/xy/nginx:v1 #上傳鏡像到Harbor docker push 192.168.48.14/xy/nginx:v1
瀏覽器訪問倉庫,查看鏡像
(5)從私有倉庫下載鏡像
使用另外一臺服務器,進行鏡像下載
#添加私有倉庫地址 vim /etc/docker/daemon.json { "insecure-registries": ["192.168.48.14"] } #下載鏡像 #docker pull 私有倉庫地址/倉庫名/鏡像名:標簽 docker pull 192.168.48.14/xy/nginx:v1
查看Hardor日志:
(6)Harbor管理
可以使用 docker-compose 來管理 Harbor。一些有用的命令如下所示,必須在與docker-compose.yml 相同的目錄中運行。
修改 Harbor.cfg 配置文件:
- 要更改 Harbour 的配置文件時,請先停止現有的 Harbour 實例並更新 Harbor.cfg;
- 然後運行 prepare 腳本來填充配置;
- 最後重新創建並啟動 Harbour 的實例。
#卸載 docker-compose down -v #編輯配置文件 vim harbor.cfg #填充配置 ./prepare #啟動Harbor docker-compose up -d #如果報錯 解決思路 關閉防火墻、重啟docker systemctl stop firewalld setenfore 0 systemctl restart docker
到此這篇關於Docker容器harbor私有倉庫部署和管理的文章就介紹到這瞭,更多相關Docker harbor內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 基於Harbor構建docker私有倉庫的方法
- docker建立私有倉庫的過程
- Jenkins打包微服務構建Docker鏡像運行的實現
- docker5 全功能harbor倉庫搭建過程
- jenkins+docker+nginx+nodejs持續集成部署vue前端項目