linux搭建harbor私服

前言
前幾天我們分享了manjaro環(huán)境下構(gòu)建k8s集群的過程,其中我提到我順手搭建了harbor環(huán)境,所以今天我想抽點時間來簡單分享下如何在linux環(huán)境下搭建harbor平臺。
Harbor
我們先來看下harbor是什么?
harbor是一個容器鏡像倉庫的開源項目,它主要為我們提供了一套鏡像存儲管理的解決方案,我們簡單將它理解為鏡像倉庫即可。它中文的意思是港口,也就是存放鏡像的倉庫,而docker是碼頭工人的意思,也就是鏡像的搬運工,突然想起了某泉的廣告詞,對docker來說,也同樣適用:我不生產(chǎn)鏡像,我只是鏡像的搬運工。
Harbor是為企業(yè)用戶設(shè)計的容器鏡像倉庫開源項目,包括了權(quán)限管理(RBAC)、LDAP、審計、安全漏洞掃描、鏡像驗真、管理界面、自我注冊、HA 等企業(yè)必需的功能,同時針對中國用戶的特點,設(shè)計鏡像復(fù)制和中文支持等功能。
準(zhǔn)備工作
因為我們的harbor環(huán)境是基于docker-compose構(gòu)建的,所以我們先要安裝docker-compose,這里以manjaro為例,其他環(huán)境類似:
sudo?pacman?-S?docker-compose
#?ubuntu環(huán)境可有通過如下命令
sudo?apt?install?sudo?docker-compose

版本沒有要求,我目前安裝的是2.2.2:

安裝完成后可以通過下面的命令測試下:
docker-compose?-v
執(zhí)行結(jié)果類似上圖,則表明安裝成功。
下載安裝
下載腳本
harbor本身是開源項目,可以直接訪問項目github倉庫進(jìn)行下載,項目地址如下:
https://github.com/goharbor/harbor
不喜歡自己動手的小伙伴可以直接通過如下命令下載:
wget?https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
下載完成后直接解壓即可,命令如下:
tar?-zxvf?harbor-offline-installer-v2.4.1.tgz

解壓之后文件目錄如下:

下面我們只需要修改配置文件即可。
配置
解壓之后的harbor目錄下有一個名為harbor.yml.tmpl的配置文件模板,我們需要基于這個文件構(gòu)建我們的配置文件(配置模板),這里直接復(fù)制即可,復(fù)制之后的目標(biāo)文件名為harbor.yml(強制,如果要用其他名稱,就需要修改intall.sh腳本)。
下面我們看下如何配置,這里我直接放上我的配置和各個配置的作用:
#?Configuration?file?of?Harbor
#?這里配置的是我們harbor服務(wù)的訪問ip,管理端也是通過這個地址訪問的,不要使用localhost?或者?127.0.0.1,因為Harbor是需要外部客戶端訪問的
hostname:?192.168.0.102
#?http的訪問配置
http:
??#?http訪問端口,?默認(rèn)80.?如果啟用了https協(xié)議,?則會通過這個端口重定向到https端口
??port:?88
#?harbor管理端的登錄密碼,默認(rèn)賬戶是admin
harbor_admin_password:?Harbor12345
#?Harbor?DB設(shè)置
database:
??#?數(shù)據(jù)庫
??password:?root123
??#?idle最大連接數(shù)
??max_idle_conns:?50
??#?數(shù)據(jù)庫最大連接數(shù),默認(rèn)1024(postgres)
??max_open_conns:?100
#?默認(rèn)數(shù)據(jù)卷()
data_volume:?/data
#?以下數(shù)據(jù)我沒有改動
trivy:
??ignore_unfixed:?false
??skip_update:?false
??#
??#?insecure?The?flag?to?skip?verifying?registry?certificate
??insecure:?false
jobservice:
??#?Maximum?number?of?job?workers?in?job?service
??max_job_workers:?10
notification:
??#?Maximum?retry?count?for?webhook?job
??webhook_job_max_retry:?10
chart:
??#?Change?the?value?of?absolute_url?to?enabled?can?enable?absolute?url?in?chart
??absolute_url:?disabled
#?Log?configurations
log:
??#?options?are?debug,?info,?warning,?error,?fatal
??level:?info
??#?configs?for?logs?in?local?storage
??local:
????rotate_count:?50
????rotate_size:?200M
????#?The?directory?on?your?host?that?store?log
????location:?/var/log/harbor
_version:?2.4.0
proxy:
??http_proxy:
??https_proxy:
??no_proxy:
??components:
????-?core
????-?jobservice
????-?trivy
除了上面的ip、端口以及連接數(shù),其他的配置我都用的是默認(rèn)配置,修改完成之后,我們就可以安裝了。
安裝
安裝也很簡單,我們直接執(zhí)行install.sh腳本即可,為了保險起見,推薦使用sudo操作:
sudo?./install.sh
然后靜靜等待安裝完成即可:


看到started successfully,就說明harbor已經(jīng)安裝完成了,我們可以通過瀏覽器訪問下。
測試
用瀏覽器打開我們剛才配置的地址和端口,可以看到如下頁面:

至此,我們的harbor就安裝完成了,是不是很簡單呢?
使用
下面我們再來看下具體如何使用harbor。
通過我們前面配置的密碼和用戶名(默認(rèn)admin),登錄之后我們會看到如下頁面:

正常情況下,你應(yīng)該只能看到library這個項目,你可以在這里創(chuàng)建自己的項目,然后后面我們可以通過docker往harbor的項目中推送鏡像。
鏡像操作
在通過docker向harbor推送鏡像之前,我們先要在docker中配置本地倉庫,首先我們要打開docker的配置文件:
sudo?vim?/etc/docker/daemon.json
向其中增加insecure-registries的配置信息:
?"insecure-registries":["http://192.168.0.102:88"]
最終配置完的效果如下:

這里的http://192.168.0.102:88就是我前面配置的harbor的地址和端口,配置完成后我們才能通過docker正常登錄,否則會報錯。
登錄
登錄命令如下:
sudo?docker?login?-u?admin?-p?Harbor12345?192.168.0.102:88
這里簡單解釋下,-u后面是登錄用戶名,-p是登錄密碼,再后面是地址和端口

正常情況下,最后會提示Login Succeeded,表明配置都是ok的,這時候我們就可以通過dokcer命令向harbor中推送鏡像了。
推送鏡像
關(guān)于spring boot項目構(gòu)建docker鏡像的相關(guān)內(nèi)容可以參考之前我們分享的內(nèi)容:
https://mp.weixin.qq.com/s?__biz=MjM5NDMwNzA0NQ==&mid=2648419079&idx=1&sn=077f24cdd1308041e238ffa4705b5bb1&chksm=bea6c58d89d14c9b4cb4a1eea431c81af338c534dcaf01a827b7511815f8a7f5e69f20e91a35&token=1495367877&lang=zh_CN#rd
首先我們通過docker build構(gòu)建鏡像:

然后通過tag命令創(chuàng)建標(biāo)簽,再通過push命令將鏡像推送到harbor倉庫中,這里以我剛創(chuàng)建的syske項目為例。其實,harbor的項目下面是有鏡像推送命令的,我們只需要復(fù)制出來替換其中的REPOSITORY和TAG即可:

tag命令
復(fù)制出來的tag命令如下:
docker?tag?SOURCE_IMAGE[:TAG]?192.168.0.102:88/syske/REPOSITORY[:TAG]
替換之后如下:
docker?tag?springboot-learning:v1?192.168.0.102:88/syske/springboot-learning:v1
如果在執(zhí)行tag命令過程中提示權(quán)限不足,可以通過sudo操作:

操作不報錯,則表明操作成功。
push命令
復(fù)制出來的push命令如下:
docker?push?192.168.0.102:88/syske/REPOSITORY[:TAG]
替換之后如下:
docker?push?192.168.0.102:88/syske/springboot-learning:v1
和tag命令類似,這個命令也是有權(quán)限要求的:

然后換成sudo重新操作即可:

推送成功后,我們可以登錄harbor看下:

可以看到harbor中已經(jīng)有了我們剛剛推送的鏡像,這樣我們就可以在k8s、docker等環(huán)境使用我們的鏡像了

拉取鏡像
拉取鏡像的命令,我們同樣也可以在harbor頁面復(fù)制:

然后我們就可以通過復(fù)制到的命令拉取我們的鏡像
docker?pull?192.168.0.102:88/syske/springboot-learning:v1
或者在k8s直接使用:

結(jié)語
好了,今天的內(nèi)容就到這里吧,下面我們做一個簡單的總結(jié)。
今天我們主要分享了harbor私服的搭建過程,其中包括harbor的基本配置和簡單使用,當(dāng)然從內(nèi)容上來講,這些都屬于比較基礎(chǔ)的操作,但是經(jīng)過這樣的流程探索和實踐,我相信你也一定對后端開發(fā)部署的流程有了更全面的認(rèn)知和了解,有了這些認(rèn)知,你未來就算使用其他的開發(fā)管理工具,你也會清楚地知道每一個組件的用途,幫助你更好地使用這些工具。另外,就算未來讓你拋開這些工具自己動手去操作,你也不至于手足無措,因為你掌握了這些組件最基本的內(nèi)部工作原理。
當(dāng)然,harbor也只能算企業(yè)應(yīng)用開發(fā)部署中的一個小組件,畢竟目前很多公司已經(jīng)上了集成開發(fā)環(huán)境,也就是我們經(jīng)常聽到的CI/CD(持續(xù)集成/持續(xù)交付),這里我放上一張我們公司目前CI/CD的大致流程圖(docker環(huán)境目前已經(jīng)棄用了),目前很多公司可能都是這樣的開發(fā)部署流程,只是工具上會有一些小差異:

當(dāng)然,有些公司可能是通過jenkins手動打包(包括生成鏡像并推送到私服),然后通過手動重啟容器,這一套手動操作和上面的自動化操作都沒有本質(zhì)上區(qū)別,只是效率更高,流程更規(guī)范而已。
