之前寫過 文章,然後有同仁評論道這樣做太複雜了,如果Harbor來搭建會更簡單同時功能也更強大。於是抽時間研究了基於Harbor構建本地鏡像倉庫,感覺Harbor的確更簡單同時功能更強大,再此感謝各位同仁的建議。下面將基於Harbor構建本地鏡像倉庫的步驟分享出來,再次歡迎各位同仁點評。
1、Harbor
Harbor是VMware公司開源了企業級Registry項目, 其的目標是幫助用戶迅速搭建一個企業級的Docker registry服務。它以Docker公司開源的registry為基礎,額外提供瞭如下功能:
- Cloud native registry:支持容器鏡像和Helm Charts,為雲原生環境提供服務
- Role based access control:基於角色的訪問控制
- Policy based image replication:基於策略的鏡像複製
- Vulnerability Scanning:鏡像的漏洞掃描
- LDAP/AD support:AD/LDAP集成
- Image deletion & garbage collection:鏡像的刪除和空間清理
- Notary:可以保證鏡像的真實性
- Graphical user portal:友好的管理UI
- Auditing:日誌審計
- RESTful API:提供RESTfull接口易於與外部系統集成
- Easy deployment:部署簡單
以上功能是將官網的內容做了簡單翻譯,如果大家想深層次瞭解一下,可以查看Harbor官網內容。
2、部署
部署Harbor前,首先得有docker環境、docker-compose的環境,如果大家沒有docker環境,可以參考我之前的一篇文章 搭建環境,對於安裝docker-compose是很簡單,只如下操作:
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
注意:如果運行環境不能直接聯外網,則可以先下載二進制包,然後手動放置到相應目錄,並授權即可。
有了docker環境、docker-compose的環境後,可以開始部署Harbor了,步驟如下:
(1)、到Github上下載目前Harbor的最新版本,它提供兩種下載方式,一種是離線安裝包和在線安裝包,大家可以根據自己的情況下載,此處下載的是離線安裝包
![微服務架構 - 基於Harbor構建本地鏡像倉庫](http://p2.ttnews.xyz/loading.gif)
(2)、下載後,將該文件解壓到/opt/harbor目錄下,當然大家也可以根據自己的使用情況放到相應的目錄即可
(3)、此處要開啟https訪問,所以得生成證書(注意:如果不以https訪問,這一個步驟就是不需要的),操作如下:
mkdir /opt/harbor/certs
cd /opt/harbor/certs
openssl req \\
-new \\
-newkey rsa:4096 \\
-days 365 \\
-subj "/CN=192.168.208.147" \\
-nodes \\
-x509 \\
-keyout auth.key \\
-out auth.cert
注意:此處的ip地址192.168.208.147,是搭建Harbor服務所在的ip地址
(4)、修改harbor.cfg配置文件信息,分別修改以下配置信息:
# 主機名改成本服務器的ip
hostname = 192.168.208.147
# 訪問的協議https
ui_url_protocol = https
# 由於前一步我們自己生成了證書,所以該值改為off
customize_crt = off
# ssl證書的路徑
ssl_cert = /opt/harbor/certs/auth.cert
# ssl密鑰的路徑
ssl_cert_key = /opt/harbor/certs/auth.key
# 設置ui系統的admin賬號的密碼,默認為Harbor12345
harbor_admin_password = Adminjgyw
(5)、安裝,執行:
./install.sh
(6)、執行上面的安裝腳本,實質是執行docker compose來部署應用的,所以可以通過docker compose命令查看服務信息:
docker-compose ps
結果為:
![微服務架構 - 基於Harbor構建本地鏡像倉庫](http://p2.ttnews.xyz/loading.gif)
(7)、訪問https://192.168.208.147,如果如下:
3、測試
部署完成之後,測試一下鏡像的pull和push功能,首先將admin賬號登錄,並創建jgyw項目,即:
(1)、點擊“新建項目”
(2)、填寫項目信息,名稱為jgyw,訪問級別為公開,即所有人都可以pull鏡像下來,即:
(3)、創建用戶
(3)、為jgyw項目添加成員,同時角色為開發人員,這樣可以將鏡像push到該項目中,即:
(4)、push鏡像
docker login 192.168.208.147
# 輸入上面新建的jgyw用戶名和密碼即可登錄
如果此處發生如下錯誤:
Error response from daemon: Get https://192.168.208.147/v1/users/: x509: cannot validate certificate for 192.168.208.147 because it doesn't contain any IP SANs
則需要將/usr/lib/systemd/system/docker.service文件中ExecStart值修改為如下形式,即:
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.208.147
測試openzipkin/zipkin:2.12.1鏡像
將openzipkin/zipkin:2.12.1鏡像打上標籤,即:
docker tag openzipkin/zipkin:2.12.1 192.168.208.147/jgyw/zipkin:2.12.1
然後執行push命令:
docker push 192.168.208.147/jgyw/zipkin:2.12.1
執行完成後,可以查到jgyw項目中就有了該鏡像,即:
(5)、pull鏡像
首先將本機的192.168.208.147/jgyw/zipkin:2.12.1鏡像刪除掉,即:
docker rmi 192.168.208.147/jgyw/zipkin:2.12.1
然後執行pull命令,即:
docker pull 192.168.208.147/jgyw/zipkin:2.12.1
鏡像就拉取下來了。
閱讀更多 架構與我 的文章