Docker從入門(mén)到實(shí)戰(zhàn)系列之Dockerhub&私有化倉(cāng)庫(kù)Harbor搭建及使用
前言
在前面的文章中,我們介紹了如何定制鏡像、容器編排,但仿佛對(duì)鏡像管理并沒(méi)有提及,那么鏡像文件我們是否可以像管理代碼一樣實(shí)現(xiàn)push、pull的操作呢?答案是有的,docker-hub就是一款公共倉(cāng)庫(kù),在上面可以搜索到別人創(chuàng)建好的各種各樣的鏡像,以及管理自己的鏡像;Harbor是一款私有化鏡像倉(cāng)庫(kù),我們可以把鏡像上傳上去,同一內(nèi)網(wǎng)下的其他用戶均可以下載使用,因?yàn)槭遣渴鹪谧约旱姆?wù)器,因此對(duì)于安全性這方面更有保障。docker-hub和Harbor的關(guān)系我們可以類(lèi)比成GitHub和Gitlab。
一、公共鏡像倉(cāng)庫(kù)Docker-hub
1.docker-hub簡(jiǎn)介
公共鏡像倉(cāng)庫(kù)一般是 Docker 官方或者其他第三方組織(阿里云,騰訊云,網(wǎng)易云等)提供的,允許所有人注冊(cè)和使用的鏡像倉(cāng)庫(kù)。Docker Hub 是全球最大的鏡像市場(chǎng),目前已經(jīng)有超過(guò) 10w 個(gè)容器鏡像。
2.提交鏡像到倉(cāng)庫(kù)
具體步驟:注冊(cè)賬號(hào)>>登錄>>創(chuàng)建倉(cāng)庫(kù)>>>linux命令行docker登錄>>修改鏡像名稱(chēng)(保持與倉(cāng)庫(kù)名稱(chēng)一致)>>提交鏡像到倉(cāng)庫(kù)
① 創(chuàng)建鏡像倉(cāng)庫(kù)
類(lèi)似于github上創(chuàng)建代碼倉(cāng)庫(kù),分為public(公開(kāi)的,互聯(lián)網(wǎng)可見(jiàn))和private(受保護(hù)的,僅自己可見(jiàn))兩種。
② Linux命令行登錄Docker賬號(hào)
③ 修改鏡像名稱(chēng),保持與鏡像倉(cāng)庫(kù)一致
④ 提交鏡像到公共倉(cāng)庫(kù)
⑤ 查看鏡像倉(cāng)庫(kù)
二、私有化鏡像倉(cāng)庫(kù)Harbor
1.Harbor簡(jiǎn)介
Harbor是由VMware公司開(kāi)源的企業(yè)級(jí)的Docker Registry管理項(xiàng)目,它包括權(quán)限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊(cè)、鏡像復(fù)制和中文支持等功能。
作為一個(gè)企業(yè)級(jí)私有 Registry 服務(wù)器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構(gòu)建和運(yùn)行環(huán)境傳輸鏡像的效率。Harbor 支持安裝在多個(gè) Registry 節(jié)點(diǎn)的鏡像資源復(fù)制,鏡像全部保存在私有 Registry 中, 確保數(shù)據(jù)和知識(shí)產(chǎn)權(quán)在公司內(nèi)部網(wǎng)絡(luò)中管控。另外,Harbor 也提供了高級(jí)的安全特性,諸如用戶管理,訪問(wèn)控制和活動(dòng)審計(jì)等。
- 基于角色的訪問(wèn)控制 - 用戶與 Docker 鏡像倉(cāng)庫(kù)通過(guò) “項(xiàng)目” 進(jìn)行組織管理,一個(gè)用戶可以對(duì)多個(gè)鏡像倉(cāng)庫(kù)在同一命名空間(project)里有不同的權(quán)限。
- 鏡像復(fù)制 - 鏡像可以在多個(gè) Registry 實(shí)例中復(fù)制(同步)。尤其適合于負(fù)載均衡,高可用,混合云和多云的場(chǎng)景。
- 圖形化用戶界面 - 用戶可以通過(guò)瀏覽器來(lái)瀏覽,檢索當(dāng)前 Docker 鏡像倉(cāng)庫(kù),管理項(xiàng)目和命名空間。
- AD/LDAP 支持 - Harbor 可以集成企業(yè)內(nèi)部已有的 AD/LDAP,用于鑒權(quán)認(rèn)證管理。
- 審計(jì)管理 - 所有針對(duì)鏡像倉(cāng)庫(kù)的操作都可以被記錄追溯,用于審計(jì)管理。
- 國(guó)際化 - 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語(yǔ)言將會(huì)添加進(jìn)來(lái)。
- RESTful API - RESTful API 提供給管理員對(duì)于 Harbor 更多的操控,使得與其它管理軟件集成變得更容易。
- 部署簡(jiǎn)單 - 提供在線和離線兩種安裝工具, 也可以安裝到 vSphere 平臺(tái) (OVA 方式) 虛擬設(shè)備。
gitee地址:??https://gitee.com/project_harbor/harbor?utm_source=alading&utm_campaign=repo??
2.Harbor搭建
安裝說(shuō)明: Harbor的所有服務(wù)組件都是在Docker中部署的,所以官方安裝使用Docker-compose快速部署,所以需要安裝 Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0, Docker-compose版本不小于1.6.0。
① 下載并解壓安裝包
在線下載:
② 編輯配置文件
按照如下內(nèi)容編輯:
- hostname改為本機(jī)ip
- 端口默認(rèn)80,可以改為其他指定端口
- 注釋掉https的相關(guān)配置
③ 準(zhǔn)備安裝環(huán)境
執(zhí)行完成后,本地會(huì)多一個(gè)docker-compose.yml文件和common目錄
④ 安裝harbor
安裝過(guò)程中會(huì)自動(dòng)下載harbor鏡像并啟動(dòng)相關(guān)容器。
⑤ 訪問(wèn)harbor
安裝成功后,即可訪問(wèn)harbor:http://192.168.1.122:8087,其中:ip為本機(jī)ip,端口為配置文件harbor.yml中配置的端口。默認(rèn)賬號(hào)和密碼為:admin Harbor12345
harbor.yml文件中可查看或修改密碼
⑥ 安裝過(guò)程中常見(jiàn)問(wèn)題及解決
- 報(bào)錯(cuò)redis容器重復(fù)
原因:本地已存在redis容器,harbor無(wú)法啟動(dòng)redis容器
解決辦法:修改harbor目錄下docker-compose.yml中的redis容器名稱(chēng),重新啟動(dòng)
查看harbor各個(gè)容器狀態(tài):
- 報(bào)錯(cuò)registry容器重復(fù)
若本地之前已存在registry容器時(shí),harbor安裝過(guò)程會(huì)報(bào)錯(cuò),解決方案:刪除原registry容器,重新執(zhí)行./install.sh進(jìn)行安裝;若此方式仍報(bào)錯(cuò),則執(zhí)行docker-compose up -d啟動(dòng)各個(gè)服務(wù);
3.推送本地鏡像到Harbor
① 創(chuàng)建項(xiàng)目
② Docker登錄
由于之前登錄過(guò)docker-hub,所以再次使用“docker login”命令登錄時(shí),默認(rèn)登錄的還是docker-hub的地址。因此,如果想要登錄harbor,需要在登錄時(shí)指定登錄地址。
首次登錄,根據(jù)提示輸入harbor用戶名及密碼即可,與前端登錄使用的賬號(hào)密碼一致。
由于我前面登錄過(guò)一次這個(gè)地址,本地會(huì)保存認(rèn)證記錄,因此再次登錄時(shí)無(wú)需輸入用戶名密碼即可登錄成功。
如遇以下報(bào)錯(cuò):
則要在/etc/docker/daemon.json文件中將本機(jī)ip(端口非80時(shí)需要帶上端口號(hào))加入到insecure-registries列表中,并重載配置。
再次登錄后登錄成功:
③ 本地鏡像打tag
鏡像名稱(chēng)需要命名為:ip:端口號(hào)/項(xiàng)目名稱(chēng)/鏡像名:tag名,才能上傳到該指定項(xiàng)目下,例如rabbitmq鏡像,則名稱(chēng)為:
192.168.1.122:8087/harbor/rabbitmq:5.7.33
為了方便測(cè)試,我直接復(fù)制本地的一個(gè)鏡像,并重新命名:
④ 推送本地鏡像到Harbor
查看名為harbor的項(xiàng)目下,存在rabbitmq:3.7-management,測(cè)試成功。
⑤ 從Harbor拉取鏡像
- 拉取鏡像
從下圖可以看出,MySQL鏡像已經(jīng)拉取成功
同時(shí),Harbor管理端也能看到最新的拉取時(shí)間:
- 基于拉取的鏡像創(chuàng)建容器
進(jìn)入MySQL容器,登錄MySQL
至此,即完成了"登錄harbor后臺(tái)>>創(chuàng)建倉(cāng)庫(kù)>>>docker命令行登錄harbor>>修改鏡像名稱(chēng)(保持與倉(cāng)庫(kù)名稱(chēng)一致)>>提交鏡像到倉(cāng)庫(kù)>>拉取鏡像>>基于拉取的鏡像創(chuàng)建容器>>查看容器"這一系列完整的操作。