目錄
一、前言
二、Harbor介紹
2.1 什么是Harbor
2.1.1 Harbor架構(gòu)圖
2.2 Harbor 特征
2.3 Harbor 核心組件
2.4 Harbor使用場景
三、Harbor部署
3.1 安裝docker compose
3.1.1 安裝方式一
3.2 基于python3 pip安裝docker compose
3.2.1 安裝python3
3.2.2 安裝python-pip3并升級
3.2.3 執(zhí)行命令安裝 docker-compose
3.2.4 查看docker-compose版本
3.3 安裝horbor
3.3.1 下載安裝包
3.3.2 解壓安裝包
3.3.3 修改配置文件
3.3.4 執(zhí)行安裝
3.3.5 環(huán)境檢查
3.3.6 瀏覽器訪問
四、Harbor基本使用
4.1 機器準(zhǔn)備
4.1.1 配置服務(wù)器免登
4.2?推送鏡像到Harbor自定義鏡像倉庫
4.2.1 創(chuàng)建項目
4.2.2 修改docker配置文件
4.2.3 鏡像打標(biāo)
4.2.4 推送鏡像
4.3 jenkins任務(wù)集成Harbor
4.3.1 修改jenkins的任務(wù)配置
4.3.2 重新執(zhí)行任務(wù)
4.4?其他機器獲取harbor鏡像
4.4.1 A、B機器添加授信
4.4.2 刪除并重新推送鏡像
4.4.3 其他機器獲取鏡像
4.4.4 拉取鏡像
4.5 使用jenkins任務(wù)進行分發(fā)鏡像
4.5.1?配置全局ssh憑證
4.5.2?配置ssh連接信息
4.5.3 配置測試任務(wù)
五、鏡像倉庫備選方案
5.1 阿里云鏡像倉庫
5.2 dockerhub
5.3?Nexus Repository Manager
5.4?JFrog Artifactory
六、docker可視化管理工具
七、寫在文末
一、前言
在上一篇,我們搭建了jenkins,并通過配置jenkins任務(wù)的方式完成了從拉取代碼,到打包構(gòu)建,最后制作docker鏡像的完整步驟。但是到這里,我們會發(fā)現(xiàn)仍然有兩個問題。
問題一:資源占用:
1、構(gòu)建出來的鏡像仍然留在jenkins這臺機器上,久而久之,這臺機器的空間將不堪重負(fù);
2、如果直接運行鏡像,這些鏡像將會占用當(dāng)前jenkins這臺機器的資源,如果后續(xù)要運行更多的鏡像,這臺機器肯定吃不消
問題二:缺少鏡像的統(tǒng)一分發(fā)和管理:
基于問題一,如何管理這些鏡像呢?既然鏡像不能一直留在這臺jenkins機器,就需要引入其他的容器管理平臺,該平臺能夠?qū)崿F(xiàn)docker鏡像的常規(guī)管理,比如容器的啟停,刪除,pull、push等操作。
基于上述這兩個最緊迫的問題,該使用什么方法解決呢?這就需要引入docker的鏡像管理工具。本文以Harbor為例進行詳細的說明。
二、Harbor介紹
官方文檔:Harbor docs | Harbor 1.10 Documentation
2.1 什么是Harbor
Harbor 是一個開源的容器鏡像倉庫,它提供了一個安全、可信賴的方式來存儲和管理容器鏡像。
-
Harbor 支持用戶創(chuàng)建自己的私有鏡像倉庫,可以在其中存儲各種容器鏡像,并且可以對這些鏡像進行權(quán)限管理、漏洞掃描、復(fù)制、備份等操作。
-
Harbor 還提供了 Web 界面和 RESTful API,使用戶可以方便地進行鏡像管理和操作。
-
通過 Harbor,用戶可以更加輕松地構(gòu)建、部署和運行容器化應(yīng)用。
2.1.1 Harbor架構(gòu)圖
2.2 Harbor 特征
Harbor 具備如下特征:
-
基于角色的訪問控制
-
用戶與Docker鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一個命名空間(project)里有不同的權(quán)限。
-
-
圖形化用戶界面
-
用戶可以通過瀏覽器來瀏覽,檢索當(dāng)前Docker鏡像倉庫,管理項目和命名空間。
-
-
鏡像復(fù)制
-
鏡像可以在多個Registry實例中復(fù)制(同步)。尤其適合于負(fù)載均衡、高可用,混合云和多云的場景。
-
-
部署簡單
-
提供在線和離線兩種安裝工具,也可以安裝到vSphere平臺(OVA方式)虛擬設(shè)備。
-
-
RESTful API
-
RESTful API 提供給管理員對于Harbor更多的操控,使得其它管理軟件集成變得更容易。
-
-
AD/LDAP支持
-
Harbor可以集成企業(yè)內(nèi)部已有的AD/LDAP,用于鑒權(quán)認(rèn)證管理。
-
-
國際化
-
已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來。
-
-
審計管理
-
所有針對于鏡像倉庫的操作都可以被記錄追溯,用于審計管理。
-
2.3 Harbor 核心組件
結(jié)合上述Harbor的架構(gòu),下面總結(jié)一下Harbor中涉及到的組件。
Harbor的Registry,UI,token等服務(wù),通過一個前置的反向代理統(tǒng)一接收瀏覽器、Dockerfile客戶端的請求,并將請求轉(zhuǎn)發(fā)給后端不同的服務(wù)。
Registry
負(fù)責(zé)存儲Docker鏡像,并處理docker push/pull 命令。由于我們要對用戶進行訪問控制,即不同用戶對Docker image有不同的讀寫權(quán)限,Registry會指向一個token服務(wù),強制用戶的每次docker pull/push請求都要攜帶一個合法的token,Registry會通過公鑰對token進行解密驗證。
Core services
這是Harbor的核心功能,主要提供以下服務(wù)
-
UI:提供圖形化界面,幫助用戶管理Registry上的鏡像,并對用戶進行授權(quán)
-
WebHook:為了及時獲取Registry上image狀態(tài)變化的情況,在Registry上配置webhook,把狀態(tài)變化傳遞給UI模塊。
-
Token:負(fù)責(zé)根據(jù)用戶權(quán)限給每個docker push/pull命令簽發(fā)token,Docker客戶端向-Registry服務(wù)發(fā)起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向Registry進行請求
Database
為core services提供數(shù)據(jù)庫服務(wù),負(fù)責(zé)儲存用戶權(quán)限、審計日志、Docker image分組信息等數(shù)據(jù)
Job Services
提供鏡像遠程復(fù)制功能,可以把本地鏡像同步到其他Harbor實例中。
Log Collector
為了幫助監(jiān)控Harbor運行,負(fù)責(zé)收集其組件的log,供日后進行分析。
2.4 Harbor使用場景
Harbor主要有如下使用場景
-
構(gòu)建和管理私有鏡像倉庫:組織可以使用Harbor搭建自己的私有Docker Registry,方便存儲和管理內(nèi)部開發(fā)的鏡像,保護知識產(chǎn)權(quán)和數(shù)據(jù)隱私。
-
安全性管理:Harbor支持用戶認(rèn)證、訪問控制、鏡像簽名等安全功能,確保鏡像的安全性,防止惡意鏡像的注入。
-
鏡像復(fù)制和同步:Harbor可以配置多個節(jié)點,實現(xiàn)鏡像的復(fù)制和同步,方便在不同地區(qū)或部門之間共享鏡像。
-
CI/CD集成:Harbor可以與CI/CD工具集成,如Jenkins、GitLab等,實現(xiàn)自動化構(gòu)建、測試和部署。
接下來,將演示基于centos7系統(tǒng)演示如何搭建Harbor。
三、Harbor部署
3.1 安裝docker compose
由于Harbor在后續(xù)對docker鏡像管理和操作中,需要進行鏡像的編排,需要用到docker compose,因此先安裝docker compose。參考下面的步驟進行安裝,這里提供了兩種方式進行選擇。
3.1.1 安裝方式一
參照下面的命令執(zhí)行安裝
#獲取安裝包
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#授權(quán)
chmod +x /usr/local/bin/docker-compose
#創(chuàng)建軟連接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#查看docker-compose版本
docker-compose --version
在實際操作時發(fā)現(xiàn),使用這種方式安裝在拉取github的包時會非常慢,下面推薦第二種方式安裝。
3.2 基于python3 pip安裝docker compose
3.2.1 安裝python3
sudo yum install python3
3.2.2 安裝python-pip3并升級
yum -y install python3-pip
pip3 install --upgrade pip
3.2.3 執(zhí)行命令安裝 docker-compose
pip3 install docker-compose
3.2.4 查看docker-compose版本
docker-compose --version
最后重啟docker
3.3 安裝horbor
3.3.1 下載安裝包
版本可以自行選擇,推薦使用2.x版本的
wget --no-check-certificate https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
3.3.2 解壓安裝包
3.3.3 修改配置文件
進入解壓后的harbor目錄,修改 harbor.yml.tmpl 配置文件,注意復(fù)制一個配置文件
cp harbor.yml.tmpl harbor.yml
修改hostname:
注釋https
- 后續(xù)使用https訪問的時候可以再配置,這里演示使用http;
需要關(guān)注的其他配置
- 默認(rèn)監(jiān)聽端口;
- 初始化密碼;
3.3.4 執(zhí)行安裝
配置修改完成,保存退出之后,直接調(diào)用目錄下的安裝腳本,這個過程可能比較漫長
直到看到下面的信息
補充
如何移除harbor已經(jīng)安裝的容器呢,使用命令:docker-compose down
3.3.5 環(huán)境檢查
使用docker ps 命令檢查一下,可以看到harbor啟動了很多個容器
3.3.6 瀏覽器訪問
瀏覽器訪問 IP:80,就來到下面的登錄頁面,登錄賬戶:admin/Harbor12345
登錄之后來到如下控制臺主頁
界面上的各個菜單的功能有興趣的同學(xué)可以繼續(xù)深入研究,這里不再過多展開了。
四、Harbor基本使用
4.1 機器準(zhǔn)備
為了后面的效果演示,需要準(zhǔn)備兩臺服務(wù)器
機器 | 作用 | 備注 |
機器A | 部署jenkins,Harbor服務(wù) | 內(nèi)存需要大點,上一篇使用該機器部署jenkins |
機器B | 業(yè)務(wù)服務(wù)器,部署docker鏡像使用 |
?
?
4.1.1 配置服務(wù)器免登
為了在jenkins配置任務(wù)時能夠方便的操作遠程機器,建議設(shè)置下免登,即配置jenkins機器與目標(biāo)業(yè)務(wù)服務(wù)器的免登授信操作,參考下面的操作步驟
機器A執(zhí)行下面的命令
ssh-keygen -t rsa
將上一步生成的文件遠程拷貝到機器B的相應(yīng)目錄下
cd .ssh
scp ./id_rsa.pub root@B機器公網(wǎng)IP:/root/.ssh/authorized_keys
拷貝完成后,使用ssh命令登錄下B機器
4.2?推送鏡像到Harbor自定義鏡像倉庫
4.2.1 創(chuàng)建項目
即創(chuàng)建一個新的倉庫,用于管理鏡像
創(chuàng)建完成后,列表中多了一條數(shù)據(jù)
4.2.2 修改docker配置文件
將下面的這行配置添加到docker的daemon.json文件中,找到insecure-registries標(biāo)簽追加即可
cd /etc/docker
vi daemon.json
Harbor部署的服務(wù)機器IP:80
加載配置文件并重啟docker
systemctl daemon-reload
systemctl restart docker
4.2.3 鏡像打標(biāo)
在上一篇中,我們通過jenkins構(gòu)建出來了一個springboot工程的鏡像
但是如果要將這個鏡像直接推送到Harbor倉庫還不行,必須要按照Harbor的要求進行命名并重新打標(biāo),參考下面的命令執(zhí)行;
docker tag 996ae7100be7 Harbor服務(wù)器地址:80/public/boot-docker:1.0
打完標(biāo)簽之后再次查看鏡像,可以發(fā)現(xiàn)新的鏡像已經(jīng)顯示出來了,細心的同學(xué)會發(fā)現(xiàn),它們的鏡像名是一樣的
4.2.4 推送鏡像
登錄Harbor
docker login -u admin -p Harbor12345 Harbor機器IP:8085
使用下面的命令,推送鏡像到Harbor,這個過程根據(jù)網(wǎng)絡(luò)情況可能有點漫長
docker push 打完tag的鏡像名
push完成之后,可以在Harbor的控制臺界面,在public項目中就能看到剛剛推上來的鏡像了
4.3 jenkins任務(wù)集成Harbor
基于上一篇中我們在jenkins中創(chuàng)建的測試任務(wù),我們做一下修改,將構(gòu)建完成的鏡像推送至Harbor的倉庫中。
4.3.1 修改jenkins的任務(wù)配置
在post steps里面,添加如下的腳本(僅供參考,實際操作時還需要結(jié)合自身的機器情況),該腳本主要做了下面幾件事:
-
基于Dockerfile將maven構(gòu)建出來的jar包制作成docker鏡像;
-
刪除之前通過構(gòu)建的帶標(biāo)簽版本號的鏡像;
-
鏡像打標(biāo)簽;
-
登錄Harbor;
-
將打標(biāo)簽的鏡像推送到Harbor的倉庫(上面創(chuàng)建的public項目倉庫);
#!/usr/bin/env bash
echo '打包完成,開始構(gòu)建鏡像'
#dockerfile:build
docker build -t boot-docker:1.0 .
sleep 10
docker rmi -f 打完tag的鏡像
sleep 10
docker tag 原鏡像
sleep 10
echo '登錄harbor'
docker login -u admin -p Harbor12345 Harbor機器IP:8085
sleep 10
docker push 本次被打完tag的鏡像
echo '完成docker鏡像推送'
4.3.2 重新執(zhí)行任務(wù)
保存上述配置,重新點擊執(zhí)行任務(wù),等待構(gòu)建完成即可
構(gòu)建完成后,檢查鏡像,可以看到帶有2.0標(biāo)簽的鏡像就創(chuàng)建出來了
同時在Harbor控制臺的public項目下,也能看到上面推送過來的docker鏡像
4.4?其他機器獲取harbor鏡像
另有一臺新機器,即上述的B機器,需要從harbor鏡像倉庫中拉取鏡像到自己機器上面部署,該如何實現(xiàn)呢?
4.4.1 A、B機器添加授信
在harbor機器上面的docker配置文件中添加如下配置
保存后重新加載配置,并重啟docker
systemctl daemon-reload
systemctl restart docker
建議在A,B兩臺機器上均做此配置,避免后面出現(xiàn)其他的錯誤(后文會提到),簡單來說,就是將各自的機器IP配置到 insecure-registries中即可。
4.4.2 刪除并重新推送鏡像
刪除原有的鏡像
docker rmi -f c9bc81de8fb3
最后通過jenkins任務(wù)或命令重新推送鏡像
4.4.3 其他機器獲取鏡像
現(xiàn)在假設(shè)我們登錄到了另一臺機器,假設(shè)為B機器,即上述授信配置中的這臺機器,使用docker命令登錄harbor
docker login -u admin -p Harbor12345 Harbor部署機器:8085
如果出現(xiàn)下面的錯誤,表面在B機器的docker配置中,認(rèn)為從上述的Harbor機器登錄是不可信的
遇到這個問題時,需要將Harbor機器的docker配置,拷貝到B機器上來,按照上面同樣的方式,修改一下這里的daemon.json配置文件,將Harbor機器的IP信息配置進去
最后加載B機器的docker配置,然后重啟docker,再次使用Docker命令登錄Harbor倉庫,此時就登錄進來了
4.4.4 拉取鏡像
上一步登錄成功后,就可以遠程拉取Harbor鏡像倉庫中的鏡像了
docker pull 前面最新打完tag的標(biāo)簽
拉取完成后,使用 docker images命令就能看到上面的那個鏡像了,后續(xù)就可以使用docker命令直接啟動鏡像即可。
4.5 使用jenkins任務(wù)進行分發(fā)鏡像
上面使用jenkins任務(wù)將構(gòu)建完的鏡像通過打標(biāo)簽,然后push到了Harbor倉庫中,接下來需要將這些鏡像分發(fā)到具體的業(yè)務(wù)服務(wù)器上,該怎么操作呢?參考下面的流程。
4.5.1?配置全局ssh憑證
找到ssh并安裝
設(shè)置憑證,系統(tǒng)管理 —> 添加憑證—>添加域,自定義一個名稱,這里意思是將使用當(dāng)前的jenkins管理你的B機器
配置憑證
4.5.2?配置ssh連接信息
通過系統(tǒng)管理 -> 全局配置找到?SSH sites 配置的地方,填寫下面的信息
?
配置之后是否可以連接呢?點擊右邊的 Check connection按鈕,如果連接成功,說明配置沒問題了,然后保存配置
4.5.3 配置測試任務(wù)
創(chuàng)建一個新的任務(wù)
進入任務(wù)的配置頁面,在構(gòu)建環(huán)境中,在Build Steps里,選擇下面執(zhí)行腳本的一項
選擇之后,編寫測試腳本
保存配置并執(zhí)行任務(wù),測試成功
編寫腳本,將上述最新打標(biāo)的鏡像推送至B機器
echo '在B機器上面執(zhí)行命令'
echo '準(zhǔn)備登錄Harbor機器的倉庫'
docker login -u admin -p Harbor12345 Harbor機器IP:8085
echo '登錄成功,開始拉取鏡像'
docker pull 最新tag的鏡像
echo '拉取鏡像成功'
然后執(zhí)行,等待鏡像的拉取完成即可,如果后續(xù)還有其他命令要執(zhí)行,可以繼續(xù)再在上述的執(zhí)行腳本中添加即可。
任務(wù)完成之后,登錄B機器,檢查鏡像是否拉取成功,然后就可以基于當(dāng)前的鏡像進行后續(xù)的操作了。
五、鏡像倉庫備選方案
5.1 阿里云鏡像倉庫
上述關(guān)于鏡像倉庫的選擇,我們使用的是Harbor作為解決方案進行說明,事實上,關(guān)于企業(yè)應(yīng)用的鏡像倉庫,很多云廠商也提供了解決方案,像阿里云,如果你購買了阿里云的云服務(wù)器,可以直接免費使用阿里云提供的鏡像倉庫作為你的鏡像托管中心,這個在另一篇文章中有詳細的說明,可以參考:k8s部署springboot項目,網(wǎng)上的資料也比較多,這也是一種比較成熟的解決方案。
5.2 dockerhub
dockerhub是docker原生的鏡像倉庫,比如大家平時拉取某個技術(shù)組件鏡像時,如果沒有配置鏡像源,將直接從dockerhub上拉取,如果想節(jié)省成本,也可以考慮直接將鏡像推送至dockerhub倉庫。
5.3?Nexus Repository Manager
Sonatype Nexus Repository Manager也是一個流行的倉庫管理工具,支持Docker以及其他包管理器。它提供了企業(yè)級的安全性、可靠性和性能優(yōu)化。
5.4?JFrog Artifactory
JFrog Artifactory是一款企業(yè)級的倉庫管理工具,支持多種軟件包格式,包括Docker鏡像。它提供了高級的存儲管理、權(quán)限控制和審計功能。
六、docker可視化管理工具
除了Harbor,你也可以選擇其他的工具,這里列舉下面幾種常見的Docker鏡像可視化管理工具:
Rancher
Rancher是一個開源的容器管理平臺,提供了圖形化界面來管理Docker容器和集群。它支持多云環(huán)境下的容器部署和管理??梢詤⒖贾暗囊黄P(guān)于rancher的介紹:rancher使用詳解
Shipyard
Shipyard是一個開源的Docker管理工具,提供了Web界面來管理Docker容器、鏡像、網(wǎng)絡(luò)等,還支持集群管理功能。
Portainer
Portainer是一款開源的輕量級Docker管理界面,提供直觀的用戶界面,可以方便地管理Docker容器、鏡像、網(wǎng)絡(luò)等。
Cockpit
Cockpit是一個基于Web的服務(wù)器管理工具,可以用于監(jiān)控和管理Linux系統(tǒng)上的Docker容器和服務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-852250.html
七、寫在文末
本文通過較大的篇幅詳細介紹了Harbor這款企業(yè)級docker管理工具的使用,并通過案例演示了如何在jenkins中配置任務(wù)集成Harbor,從而實現(xiàn)鏡像的構(gòu)建推送與分發(fā),希望對看到的同學(xué)有用哦,本篇到此結(jié)束,感謝觀看。文章來源地址http://www.zghlxwxcb.cn/news/detail-852250.html
到了這里,關(guān)于jenkins+docker集成harbor實現(xiàn)可持續(xù)集成的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!