做者博客:vps精選網 前端
咱們知道docker鏡像能夠託管到dockerhub中,跟代碼庫託管到github是一個道理。但若是咱們不想把docker鏡像公開放到dockerhub中,只想在部門或團隊內部共享docker鏡像,能不能項gitlab同樣在搭建私有的倉庫呢?答案是確定的,docker也支持將鏡像存到私有倉庫。下面將驗證docker原生的倉庫和開源的私用倉庫,並分析其特色。git
配置要求 github
要求docker版本:1.6+docker
Docker registry 版本 2.0+ubuntu
倉庫原理 後端
Docker模型的核心部分是有效的利用分層鏡像機制,鏡像能夠經過分層來進行繼承,基於基礎鏡像,能夠製做各類具體的應用鏡像。不一樣的Docker容器能夠共享一些基礎的文件系統層,同時再加上本身獨有的改動層,大大提升了存儲的效率。因爲最終鏡像最終是以tar.gz的方式靜態存儲在服務器端,這種存儲適用於對象存儲而不是塊存儲。
一次docker pull (即用戶從客戶端向倉庫拉鏡像),發生的交互。安全
1客戶端向索引請求ubuntu鏡像下載地址 服務器
2索引回覆:ubuntu所在倉庫A、 ubuntu鏡像的校驗碼(Checksum)和全部層的Token 負載均衡
3客戶端向倉庫A請求 ubuntu的全部層(倉庫A負責存儲ubuntu,以及它所依賴的層) dom
4倉庫A向索引起起請求,驗證用戶Token的合法性
5索引返回此次請求是否合法
6客戶端從倉庫下載全部的層,倉庫從後端存儲中獲取實際的文件數據,返給客戶端
具體配置步驟參考官方文檔:https://docs.docker.com/registry/deploying/
是在docker容器中運行原生私有倉庫。
下載倉庫鏡像:
docker pull registry:2
運行倉庫:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
上傳下載鏡像到本地倉庫
docker push localhost:5000/ubuntu
用如下命令啓動倉庫
docker run -d -p 5000:5000 --restart=always --name registry \
-v /opt/registry:/var/lib/registry registry:2
-v /opt/registry:/var/lib/registry 表示將本地目錄/opt/registry映射到倉庫容器中的/var/lib/registry目錄,該目錄中存儲倉庫中的鏡像文件。
客戶端與倉庫通訊加密分爲三個等級:不採用通訊加密,採用自簽名證書加密,採用經過認證的證書加密
1不採用tls加密
不用tls加密,就不能使用基礎的用戶認證功能
2採用經過認證的證書加密
官方推薦採用經過認證的證書加密,但目前沒法獲取經過認證的證書
3採用自簽名的證書加密
本次原型搭建是採用自簽名證書加密
推薦使用知名機構簽名了的CA證書
注:要開啓用戶訪問認證,就必須先採用通訊加密
訪問認證有三種方式:分別是silly、token、htpasswd
簡單介紹下用htpasswd怎麼實現訪問認證
首先,建立用戶的帳號密碼,下面命令建立了用戶testuser/testpassword
mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd
而後,以htpasswd訪問限制的方式開啓registry
在開啓命令後添加
-v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" \
登錄registry
docker login –u testuser –p testpassword myregistrydomain.com:5000
這種方式就是在auth/htpasswd白名單中添加哪些用戶,哪些用戶就能夠登錄registry。這種方式的權限控制比較粗略。
另外原生的倉庫還支持如下高級功能
對接AD/ldap:經過接入AD/ldap管理用戶及受權
日誌審計:方便查錯及跟蹤行爲
分佈式存儲:在倉庫中鏡像數量劇增時,須要考慮對接分佈式存儲
負載均衡:倉庫中鏡像訪問量劇增時,須要考慮採用負載均衡
1原生的私有倉庫提供的功能不夠豐富,不少功能須要二次開發。如用戶權限控制方面,基本沒有實現,須要從新開發
2缺乏UI界面,不適用於生產環境
若是docker原生的倉庫不能知足需求,這裏提供了幾種開源的解決方案。網上對私有倉庫解決方案的比較不是不少,收集了如下三個較常見的私有倉庫解決方案
Portus(by SUSE)是用於 Docker Registry API(v2)的開源前端和受權工具,最低要求registry版本是 2.1。它能夠做爲受權服務器和用戶界面。
優勢:
1.安全:Portus 實現了最新的Docker Registry中定義的新的受權方案。它容許對你全部的鏡像進行細顆粒度控制,你能夠決定哪一個用戶和團隊可 push/pull 鏡像。
2.輕鬆管理用戶: 在 Portus 映射你的公司,能夠定義任意數量的 Team,並從 Team 添加和移除用戶。Team 有三種類型的用戶:Viewers ,只能 pull 鏡像;Contributors,能夠 push/pull 鏡像;Owners,相似 contributors,但能夠從 team 添加或移除用戶。
3.搜索: Portus 提供你的私人註冊表的內容的預覽,同時有一個快速搜索鏡像的功能。
4.審計: 用戶的全部相關事件都會被Portus自動記錄,並可被管理員進行用戶分析。
5支持對接到AD/LDAP
缺點:
1UI界面不支持中文
項目github託管地址:https://github.com/SUSE/Portus
注:部署完成後,界面沒法與registry容器通訊。也一直沒找到如何解決,建議採用下一個方案harbor
Project Harbor是由VMware公司中國團隊爲企業用戶設計的Registry server開源項目,包括了權限管理(RBAC)、LDAP、審計、管理界面、自我註冊、HA等企業必需的功能,同時針對中國用戶的特色,設計鏡像複製和中文支持等功能
優勢:
1能夠實現 images 的私有存儲
2支持日誌統計
3支持基於角色的訪問控制(Role Based Access Control)
4支持建立多項目
5提供了管理UI界面,並原生支持中文。
6支持AD/LDAP集成
缺點:
暫未發現
未進行深刻了解,若是後續有須要,可繼續調研
參考官方教程:
https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
過程比較簡單,沒遇到問題,再也不贅述
界面以下圖:
經過測試如下功能都可用,且體驗良好。
以管理員(admin/Harbor12345)登入登出registry
建立項目
建立用戶test
以test身份pull/push 鏡像
搜索功能
日誌審計功能
做者博客:vps精選網