Docker 私有倉庫方案比較與搭建

做者博客:vps精選網    前端

咱們知道docker鏡像能夠託管到dockerhub中,跟代碼庫託管到github是一個道理。但若是咱們不想把docker鏡像公開放到dockerhub中,只想在部門或團隊內部共享docker鏡像,能不能項gitlab同樣在搭建私有的倉庫呢?答案是確定的,docker也支持將鏡像存到私有倉庫。下面將驗證docker原生的倉庫和開源的私用倉庫,並分析其特色。git

1docker原生倉庫搭建

1.1配置要求和基本原理

配置要求 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/

 

1.2搭建步驟

1.2.1搭建基礎倉庫

是在docker容器中運行原生私有倉庫。

下載倉庫鏡像:

docker pull registry:2

運行倉庫:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

上傳下載鏡像到本地倉庫

docker push localhost:5000/ubuntu

1.2.2配置存儲

用如下命令啓動倉庫

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.2.3通訊加密

客戶端與倉庫通訊加密分爲三個等級:不採用通訊加密,採用自簽名證書加密,採用經過認證的證書加密

1不採用tls加密

不用tls加密,就不能使用基礎的用戶認證功能

2採用經過認證的證書加密

    官方推薦採用經過認證的證書加密,但目前沒法獲取經過認證的證書

3採用自簽名的證書加密

本次原型搭建是採用自簽名證書加密

 

推薦使用知名機構簽名了的CA證書

1.2.4訪問受權

注:要開啓用戶訪問認證,就必須先採用通訊加密

訪問認證有三種方式:分別是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。這種方式的權限控制比較粗略。

1.2.5 其餘高級功能

另外原生的倉庫還支持如下高級功能

對接AD/ldap:經過接入AD/ldap管理用戶及受權

日誌審計:方便查錯及跟蹤行爲

分佈式存儲:在倉庫中鏡像數量劇增時,須要考慮對接分佈式存儲

負載均衡:倉庫中鏡像訪問量劇增時,須要考慮採用負載均衡

1.3存在的問題

1原生的私有倉庫提供的功能不夠豐富,不少功能須要二次開發。如用戶權限控制方面,基本沒有實現,須要從新開發

2缺乏UI界面,不適用於生產環境

2docker私有倉庫開源解決方案比較

若是docker原生的倉庫不能知足需求,這裏提供了幾種開源的解決方案。網上對私有倉庫解決方案的比較不是不少,收集了如下三個較常見的私有倉庫解決方案

2.1protus

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

2.2harbor

Project Harbor是由VMware公司中國團隊爲企業用戶設計的Registry server開源項目,包括了權限管理(RBAC)、LDAP、審計、管理界面、自我註冊、HA等企業必需的功能,同時針對中國用戶的特色,設計鏡像複製和中文支持等功能

優缺點

優勢:

1能夠實現 images 的私有存儲

2支持日誌統計

3支持基於角色的訪問控制(Role Based Access Control)

4支持建立多項目

5提供了管理UI界面,並原生支持中文。

6支持AD/LDAP集成

 

缺點:

暫未發現

2.3AppHouse

未進行深刻了解,若是後續有須要,可繼續調研

3harbor私有倉庫搭建步驟流程

參考官方教程:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

過程比較簡單,沒遇到問題,再也不贅述

4harbor 功能及使用說明

界面以下圖:

經過測試如下功能都可用,且體驗良好。

以管理員(admin/Harbor12345)登入登出registry

建立項目

建立用戶test

以test身份pull/push 鏡像

搜索功能

日誌審計功能

  做者博客:vps精選網

相關文章
相關標籤/搜索