Docker 分布式倉庫 Harbor的實現(xiàn)
Harbor 是一個用于存儲和分發(fā) Docker 鏡像的企業(yè)級 Registry 服務(wù)器,由 VMware 開源,其通過添加一些企業(yè)必需的功能特性,例如安全、標(biāo)識和管理等,擴展了開源 Docker Distribution。作為一個企業(yè)級私有 Registry 服務(wù)器,Harbor 提供了更好的性能和安全。提升用戶使用 Registry 構(gòu)建和運行環(huán)境傳輸鏡像的效率。Harbor 支持安裝在多個 Registry 節(jié)點的鏡像資源復(fù)制,鏡像全部保存在私有 Registry 中, 確保數(shù)據(jù)和知識產(chǎn)權(quán)在公司內(nèi)部網(wǎng)絡(luò)中管控,另外,Harbor 也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等
vmware 官方開源服務(wù): https://github.com/vmware/
harbor 官方github 地址: https://github.com/goharbor/harbor
harbor 官方網(wǎng)址: https://goharbor.io/
harbor 官方文檔: https://goharbor.io/docs/
Harbor 功能官方介紹
- 基于角色的訪問控制: 用戶與 Docker 鏡像倉庫通過“項目”進行組織管理,一個用戶可以對多個鏡像倉庫在同一命名空間(project)里有不同的權(quán)限
- 鏡像復(fù)制: 鏡像可在多個 Registry 實例中復(fù)制(同步)。尤其適合于負(fù)載均衡,高可用,混合云和多云的場景
- 圖形化用戶界面: 用戶可以通過瀏覽器來瀏覽,檢索當(dāng)前 Docker 鏡像倉庫,管理項目和命名空間
- AD/LDAP 支: Harbor 可以集成企業(yè)內(nèi)部已有的 AD/LDAP,用于鑒權(quán)認(rèn)證管理
- 審計管理: 所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計管理
- 國際化: 已擁有英文、中文、德文、日文和俄文的本地化版本。更多的語言將會添加進來
- RESTful API: 提供給管理員對于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易
- 部署簡單: 提供在線和離線兩種安裝工具, 也可以安裝到 vSphere 平臺(OVA 方式)虛擬設(shè)備
1. Harbor 組成
harbor 是由很多容器組成實現(xiàn)完整功能
- Proxy: 對應(yīng)啟動組件 nginx。它是一個 nginx 反向代理,代理 Notary client(鏡像認(rèn)證)、Docker client(鏡像上傳下載等)和瀏覽器的訪問請求(Core Service)給后端的各服務(wù)
- UI(Core Service): 對應(yīng)啟動組件 harbor-ui。底層數(shù)據(jù)存儲使用 mysql 數(shù)據(jù)庫,主要提供了四個 子功能:
- UI: 一個 web 管理頁面 ui
- API: Harbor 暴露的 API 服務(wù)
- Auth: 用戶認(rèn)證服務(wù),decode 后的 token 中的用戶信息在這里進行認(rèn)證;auth 后端可以接 db、ldap、uaa 三種認(rèn)證實現(xiàn)
- Token服務(wù): 負(fù)責(zé)根據(jù)用戶在每個 project 中的 role 來為每一個 docker push/pull 命令發(fā)布一個 token,如果從 docker client 發(fā)送給 registry 的請求沒有帶 token, registry 會重定向請求到 token 服務(wù)創(chuàng)建 token
- Registry: 對應(yīng)啟動組件 registry。負(fù)責(zé)存儲鏡像文件,和處理鏡像的 pull/push 命令。Harbor 對鏡像進行強制的訪問控制,Registry 會將客戶端的每個 pull、push 請求轉(zhuǎn)發(fā)到 token 服務(wù)來獲取有效的 token
- Admin Service: 對應(yīng)啟動組件 harbor-adminserver。是系統(tǒng)的配置管理中心附帶檢查存儲用量, ui 和 jobserver 啟動時候需要加載 adminserver 的配置
- Job Sevice: 對應(yīng)啟動組件 harbor-jobservice。負(fù)責(zé)鏡像復(fù)制工作的,他和 registry 通信,從一個 registry pull 鏡像然后 push 到另一個 registry,并記錄 job_log
- Log Collector: 對應(yīng)啟動組件 harbor-log。日志匯總組件,通過 docker 的 log-driver 把日志匯總到 一起
- DB: 對應(yīng)啟動組件 harbor-db,負(fù)責(zé)存儲 project、 user、 role、replication、image_scan、 access 等的 metadata 數(shù)據(jù)
2. 安裝 Harbor
下載地址: https://github.com/goharbor/harbor/releases
首先確保 docker 和 docker compose 已安裝,并且 docker compose 必須先于 harbor 安裝,否則會報錯誤
注意:docker、 docker compose、 harbor 版本要符合要求不然會安裝失敗,建議都用最新版本
以 http 模式安裝 harbor
下載 Harbor 安裝包并解壓縮
# 下載離線完整安裝包,推薦使用,下載好上傳到 /root 目錄 [root@Ubuntu2204 ~]#pwd /root [root@Ubuntu2204 ~]#ls harbor-offline-installer-v2.12.2.tgz # 解壓縮離線包 [root@Ubuntu2204 ~]#mkdir /apps [root@Ubuntu2204 ~]#tar -xvf harbor-offline-installer-v2.12.2.tgz -C /apps/ [root@Ubuntu2204 ~]#mv /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml # 只需要修改下面兩行 并把 https 相關(guān)的先注釋了 [root@Ubuntu2204 ~]#vim /apps/harbor/harbor.yml hostname: 10.0.0.100 # 修改此行,指向當(dāng)前主機 IP 或 FQDN harbor_admin_password: 123456 # 修改此行指定 harbor 登錄用戶 admin 的密碼 先把這幾行注釋了,先不走 https 12 # https related config 13 #https: 14 # https port for harbor, default is 443 15 # port: 443 16 # The path of cert and key files for nginx 17 #certificate: /your/certificate/path 18 #private_key: /your/private/key/path 19 # enable strong ssl ciphers (default: false) 20 # strong_ssl_ciphers: false # 運行 harbor 安裝腳本 [root@Ubuntu2204 ~]#/apps/harbor/install.sh # 實現(xiàn)開機自動啟動 harbor 方法1: 通過 service 文件實現(xiàn) [root@Ubuntu2204 ~]#vim /lib/systemd/system/harbor.service [Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/usr/local/bin/docker-compose -f /apps/harbor/docker-compose.yml up ExecStop=/usr/local/bin/docker-compose -f /apps/harbor/docker-compose.yml down [Install] WantedBy=multi-user.target [root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl enable harbor 方法2: 通過 rc.local 實現(xiàn) [root@Ubuntu2204 ~]#vim /etc/rc.local #!/bin/bash cd /apps/harbor /usr/local/bin/docker-compose up [root@Ubuntu2204 ~]#chmod +x /etc/rc.local
安裝成功后在瀏覽器輸入本機 IP 地址訪問
賬號:admin
密碼:123456

建立項目
harbor上必須先建立項目,才能上傳鏡像


命令行登錄 harbor
重新找一臺安裝 docker 的主機進行測試
[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
],
"insecure-registries": ["10.0.0.110"] # harbor IP 地址
}
[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker
# 登錄 harbor 倉庫
[root@Ubuntu2204 ~]#docker login 10.0.0.110
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# 查看存儲 Docker 的認(rèn)證信息等
[root@Ubuntu2204 ~]#cat .docker/config.json
{
"auths": {
"10.0.0.110": {
"auth": "YWRtaW46MTIzNDU2"
}
}
}
# 給本地鏡像打標(biāo)簽并上傳到 Harbor
[root@Ubuntu2204 ~]#docker tag alpine:latest 10.0.0.110/test/alpine:v1.0
[root@Ubuntu2204 ~]#docker push 10.0.0.110/test/alpine:v1.0
注意:上傳鏡像前,必須先登錄 harbor
修改 images 的名稱,不修改成指定格式無法將鏡像上傳到 harbor 倉庫
Harbor主機IP/項目名/image名:版本
如果不事先建立項目,會上傳鏡像失敗
查看 alpine:v1.0 上傳成功

下載 Harbor 的鏡像
重新找第二臺安裝 docker 的主機進行測試
下載前必須修改 docker 的 service 文件,加入harbor服務(wù)器的地址才可以下載
無需登錄,即可下載鏡像
[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json
{
"insecure-registries": ["10.0.0.110"] # harbor IP 地址
}
[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker
[root@Ubuntu2204 ~]#docker pull 10.0.0.110/test/alpine:v1.0
到此這篇關(guān)于Docker 分布式倉庫 Harbor的實現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Harbor內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jenkins Pipeline中Docker鏡像構(gòu)建與推送的常見問題及解決方案
在現(xiàn)代 DevOps 實踐中,Jenkins 作為一款流行的持續(xù)集成和持續(xù)交付(CI/CD)工具,被廣泛應(yīng)用于自動化構(gòu)建、測試和部署流程,然而,在實際使用 Jenkins Pipeline 進行 Docker 鏡像構(gòu)建和推送的過程中,可能會遇到各種問題,本文將通過一個具體的案例給大家詳細(xì)的介紹一下2025-01-01
Docker創(chuàng)建容器時目錄權(quán)限踩坑
這篇文章主要介紹了Docker創(chuàng)建容器時目錄權(quán)限踩坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
使用docker?部署mysql突然連接不上的問題及解決方法
這篇文章主要介紹了使用docker?部署mysql,突然連接不上,要解決這個問題需要找到根本原因,對癥治療就好,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
docker實踐之docker-compose部署mysql方式
這篇文章主要介紹了docker實踐之docker-compose部署mysql方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認(rèn)網(wǎng)段
這篇文章主要介紹了Docker如何實現(xiàn)修改Docker0網(wǎng)橋默認(rèn)網(wǎng)段,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
如何使用docker創(chuàng)建minio鏡像并上傳文件并提供demo
這篇文章主要介紹了使用docker創(chuàng)建minio鏡像并上傳文件,提供demo,minio還是很方便的,從部署到使用,都可以非常快速的搭建,而且比較穩(wěn)定,需要的朋友可以參考下2023-09-09

