Docker-------私有倉庫 Harbor 的搭建
一、Harbor簡介
-
雖然Docker官方提供了公共的映象倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的。
-
Harbor是由VMware公司開源的企業級的Docker Registry管理專案,相比docker官方擁有更豐富的許可權權利和完善的架構設計,適用大規模docker叢集部署提供倉庫服務。
-
它主要提供 Dcoker Registry 管理介面UI,可基於角色訪問控制,映象複製, AD/LDAP 整合,日誌稽核等功能,完全的支援中文。
二、Harbor 的主要功能
-
基於角色的訪問控制
使用者與Docker映象倉庫通過“專案”進行組織管理,一個使用者可以對多個映象倉庫在同一名稱空間(project)裡有不同的許可權。 -
基於映象的複製策略
映象可以在多個Registry例項中複製(可以將倉庫中的映象同步到遠端的Harbor,類似於MySQL主從同步功能),尤其適合於負載均衡,高可用,混合雲和多雲的場景。 -
圖形化使用者介面
使用者可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間。 -
支援 AD/LDAP
Harbor可以整合企業內部已有的AD/LDAP,用於鑑權認證管理。 -
映象刪除和垃圾回收
Harbor支援在Web刪除映象,回收無用的映象,釋放磁碟空間。image可以被刪除並且回收image佔用的空間。 -
審計管理
所有針對映象倉庫的操作都可以被記錄追溯,用於審計管理。 -
RESTful API
RESTful API 提供給管理員對於Harbor更多的操控, 使得與其它管理軟體整合變得更容易。 -
部署簡單
提供線上和離線兩種安裝工具, 也可以安裝到vSphere平臺(OVA方式)虛擬裝置。
Harbor 的所有元件都在 Docker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
注意: 由於 Harbor 是基於 Docker Registry V2 版本,所以 docker 版本必須 > = 1.10.0 docker-compose >= 1.6.0
三、Harbor 架構元件
1、Proxy:反向代理工具
2、Registry:負責儲存docker映象,處理上傳/下載命令。對使用者進行訪問控制,它指向一個token服務,強制使用者的每次docker pull/push請求都要攜帶一個合法的token,registry會通過公鑰對token進行解密驗證。
3、Core service:Harbor的核心功能:
- UI:圖形介面
- Webhook:及時獲取registry上image狀態變化情況,在registry上配置 webhook,把狀態變化傳遞給UI模組。
- Token服務:複雜根據使用者許可權給每個docker push/p/ull命令簽發token。Docker客戶端向registry服務發起的請求,如果不包含token,會被重定向到這裡,獲得token後再重新向registry進行請求。
4、Database:提供資料庫服務,儲存使用者許可權,審計日誌,docker image分組資訊等資料
5、Log collector:為了幫助監控harbor執行,復責收集其他元件的log,供日後進行分析
四、Harbor 部署
4.1、環境準備
-
harbor (harbor服務端,用於搭建私有倉庫)
10.0.0.30 docker-ce、docker-compose(必須安裝)、Harbor -
client(客戶端,用於遠端訪問私有倉庫) 10.0.0.40 docker-ce
4.2、安裝compose 和 harbor
#線上下載docker-compose包
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
cp -p docker-compose /usr/local/bin/
#在harbor伺服器上,線上下載harbor安裝包
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
#解壓到/usr/local中
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
[root@localhost bin]# cd /usr/local/harbor/ #在下圖中可以看到install.sh指令碼,還有.yml結尾的編排檔案
#修改harbor的引數檔案harbor.cfg
vi harbor.cfg
hostname = 10.0.0.30 ## 第5行修改為harbor伺服器IP地址,不能使用 localhost 或者127.0.0.1
#啟動harbor,install.sh會直接呼叫docker-compose.yml,進行編排容器服務
sh /usr/local/harbor/install.sh
#到這裡,harbor安裝已經完成,可以檢視Harbor啟動的映象和容器服務
docker images #檢視映象
docker ps -a #檢視容器
也可用docker-compose ps檢視容器狀態,但是需要在/usr/local/harbor目錄下執行
[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# docker-compose ps #可以看到安裝了7個容器
4.3、harbor 圖形化管理
在harbor.cfg檔案裡可以找到登入UI介面的預設使用者、密碼。
開啟瀏覽器輸入harbor的IP地址10.0.0.30登入UI介面。
在網頁harbor上新建一個私有專案project ,用來測試上傳、下載映象
#登入harbor的字元介面
docker login -u admin -p Harbor12345 http://127.0.0.1/
#先從官方公有倉庫下載一個映象
docker pull nginx
#修改特定的標籤,這個標籤不能改,127.0.0.1代表本地地址,project指定專案,nginx:v1指定具體映象名稱和版本
docker tag nginx:latest 127.0.0.1/project/nginx:v1
#上傳映象到私有倉庫
docker push 127.0.0.1/project/nginx:v1
#注意:在harbor伺服器上登入、定製tag、上傳映象都需要使用127.0.0.1,而不可以使用10.0.0.30,否則會出現錯誤
4.4、客戶端遠端訪問管理 harbor
#必須要先指定私有倉庫的地址
vi /usr/lib/systemd/system/docker.service
#新增
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.0.30 --containerd=/run/containerd/containerd.sock
#重啟服務
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker.service
#登入
[root@client ~]# docker login -u admin -p Harbor12345 http://10.0.0.30
4.5、客戶端下載、上傳映象到私有倉庫
1、下載私有倉庫的映象
[root@client ~]# docker pull 10.0.0.30/project/nginx:v1
2、上傳映象到私有倉庫
#先從官方倉庫下載nginx映象
[root@localhost system]# docker pull nginx
#給nginx映象打標籤
[root@localhost system]# docker tag nginx:latest 10.0.0.30/project/nginx:v2
[root@localhost system]# docker images
#上傳映象到私有倉庫
[root@localhost ~]# docker push 10.0.0.30/project/nginx:v2
The push refers to repository [10.0.0.30/project/nginx]
7e914612e366: Layer already exists
f790aed835ee: Layer already exists
850c2400ea4d: Layer already exists
7ccabd267c9f: Layer already exists
f5600c6330da: Layer already exists
v2: digest: sha256:99d0a53e3718cef59443558607d1e100b325d6a2b678cd2a48b05e5e22ffeb49 size: 1362
我們在 harbor 介面驗證映象是否上傳到私有倉庫。
4.6、總結
在搭建過程中,要注意客戶端遠端登入私有倉庫時,必須先在docker.service檔案裡指明倉庫地址,然後載入並重啟docker,之後才能登入。
否則出現下圖中的報錯。
vi /usr/lib/systemd/system/docker.service
#新增
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 10.0.0.30 --containerd=/run/containerd/containerd.sock
#重啟服務
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker.service
五、Harbor 管理維護
5.1、修改 Harbor.cfg 配置檔案
- 修改harbor.cfg配置檔案,先停止現有的Harbor例項並更新harbor.cfg中的配置,然後再執行prepare腳重新載入配置,最後重新建立並且啟動harbor的例項。
詳細步驟如下:
1、關閉所有容器
[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# docker-compose down -v
2、修改引數檔案
[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# vi harbor.cfg ##修改配置參看實際需求
[root@localhost harbor]# ls #目錄下有prepare指令碼,下一步執行
common docker-compose.yml harbor.v1.2.2.tar.gz NOTICE
docker-compose.clair.yml harbor_1_1_0_template install.sh prepare
docker-compose.notary.yml harbor.cfg LICENSE upgrade
3、重新載入配置檔案,重啟服務
[root@harbor harbor]# ./prepare
[root@server3 harbor]# systemctl daemon-reload
[root@harbor harbor]# systemctl restart docker ##重啟docker服務
[root@harbor harbor]# docker-compose up -d ##啟動容器服務
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating registry ... done
Creating harbor-adminserver ... done
Creating harbor-ui ... done
Creating nginx ... done
Creating harbor-jobservice ... done
5.2、UI 介面操作
建立新使用者 test-tom,記住建立的密碼,稍後使用 。
在專案裡新增新的使用者成員。
在client上,使用新使用者遠端登入harbor,來進行下載和上傳映象
#首先退出已登陸的賬號
[root@localhost ~]# docker logout http://10.0.0.30
Removing login credentials for 10.0.0.30
#使用新的賬戶登入
[root@client ~]# docker login http://10.0.0.30
下載 harbor 倉庫內的映象
上傳映象
1、改成私有倉庫的專有標籤
[root@localhost ~]# docker tag 10.0.0.30/project/nginx:v1 10.0.0.30/project/nginx:v3
2、上傳映象到私有倉庫
[root@localhost ~]# docker push 10.0.0.30/project/nginx:v3
檢視UI介面顯示上傳成功!
相關文章
- Docker搭建Harbor私有倉庫Docker
- Docker搭建私有倉庫Registry&HarborDocker
- 手把手教你搭建Docker私有倉庫HarborDocker
- Docker私有倉庫之Harbor神器Docker
- 【Harbor學習筆記】-教你快速搭建Docker私有倉庫筆記Docker
- 搭建Harbor 映象倉庫
- 微服務探索之路03篇-docker私有倉庫Harbor搭建+Kubernetes(k8s)部署私有倉庫的映象微服務DockerK8S
- containerd 配置使用私有映象倉庫 harborAI
- Harbor-私有映象倉庫的安裝部署
- Harbor倉庫搭建及使用
- Docker--harbor私有倉庫部署與管理Docker
- NPM 私有倉庫的搭建NPM
- 用Docker搭建cnpm私有倉庫以及私有倉庫的使用DockerNPM
- 程式設計師都在學的docker--搭建harbor私有倉庫與管理程式設計師Docker
- docker 私有倉庫搭建Docker
- 搭建python私有倉庫Python
- gitlab私有倉庫搭建Gitlab
- docker搭建私有倉庫Docker
- 容器技術之Docker私有映象倉庫harborDocker
- 搭建私有的Composer倉庫
- Docker倉庫之Harbor企業級映象倉庫的搭建與使用Docker
- Docker倉庫之Registry私有映象倉庫的搭建與使用Docker
- 部署docker-consul群集,Harbor構建Docker私有倉庫Docker
- Linux搭建私有軟體倉庫Linux
- 使用verdaccio 搭建npm私有倉庫NPM
- 使用 SVN 搭建 Composer 私有倉庫
- 使用verdaccio搭建私有npm倉庫NPM
- Docker入門-搭建docker私有倉庫Docker
- docker使用容器搭建本地私有倉庫Docker
- Docker基礎-搭建本地私有倉庫Docker
- 使用 docker + verdaccio 搭建npm私有倉庫DockerNPM
- 私有化輕量級持續整合部署方案--06-私有映象倉庫-Harbor
- 使用 Satis 搭建私有的 Composer 包倉庫
- 使用Github搭建Maven私有遠端倉庫GithubMaven
- Jenkins之Nexus搭建Maven私有倉庫教程JenkinsMaven
- Docker 企業級映象倉庫 Harbor 的搭建與維護Docker
- docker筆記37-docker私有倉庫的搭建Docker筆記
- kubernetes實踐之二十八:使用Harbor作為私有映象倉庫