【編者的話】本文根據雲舒網絡博客整理發布。文章詳細介紹了Docker Registry以及帶UI管理的倉庫管理軟件 Portus搭建過程。
前言:
首先,Docker Hub是一個很好的用於管理公共鏡像的地方,我們可以在上面找到想要的鏡像(Docker Hub的下載量已經達到數億次);而且我們也可以把自己的鏡像推送上去。但是,有的時候,使用場景需要我們有一個私有的鏡像倉庫用於管理自己的鏡像,這個時候我們就通過Registry來實現此目的。本文詳細介紹了本地鏡像倉庫Docker Registry & Portus的搭建過程(Portus是一個帶UI管理的倉庫管理軟件),對於文中細節有興趣或有疑問的朋友歡迎加群討論。
Registry搭建篇
Docker & Registry環境准備
在談到Registry的部署之前,我們首先要考慮設計一個什么樣Registry的倉庫環境,是部署測試環境,還是生產環境。如果是用於生產環境發布Registry,必須考慮如下因素:
a. 應在何處存儲鏡像?
b. 用戶的權限是否受控?
c. 當發生問題,如何解決?日志是否可以查看?
d. 如何快速提取鏡像?(注:這是至關重要的,如果依賴鏡像進行構建測試環境、生產環境或自動化系統,這是取決倉庫是否有生命力的最重要指標。)
本實例把存儲鏡像的路徑放置到宿主機的文件路徑下。例如:/opt/myregistry目錄中。這樣即使宿主機中Docker Registry 出現問題,我們再重創建一個,把此路徑添加到新Registry Server中,那么之前上傳的鏡像文件仍然存在,這就更方便大家使用。下面是安裝之前進行的一些准備工作:
1.Docker安裝
首先,選擇一個合適的PC機做宿主機,其配置參數如下:
CPU: Intel E8400 Duo CPU 3.0GHz RAM: 2G disk:300G
CPU查看命令: more /proc/cpuinfo |grep "model name"
Mem查看命令: grep MemTotal /proc/meminfo
2.Registry安裝
由於Docker和Registry更新比較快,所以我們在此宿主機中進行安裝的時候,選擇Registry2.1版本進行安裝。
yum -y install docker-registry
至此,Docker和registry的安裝已經完成,下面開始進行配置和測試。
注:安裝完成后需要對Docker和Registry進行enable and start。
Registry原理
Docker模型的核心部分是有效的利用分層鏡像機制,鏡像可以通過分層來進行繼承,基於基礎鏡像,可以制作各種具體的應用鏡像。不同的Docker容器可以共享一些基礎的文件系統層,同時再加上自己獨有的改動層,大大提高了存儲的效率。由於最終鏡像最終是以tar.gz的方式靜態存儲在服務器端,這種存儲適用於對象存儲而不是塊存儲。
一次docker pull 發生的交互
▼
- Client向Index請求,知道從哪里下載CentOS
- Index回復
- CentOS在RegistryA
- CentOS的Checksum,所有層的Token
- Client向Registry A請求, CentOS的所有層。Registry A負責存儲CentOS,以及它所依賴的層、
- Regsitry A向Index發起請求,驗證用戶Token的合法性
- Index返回這次請求是否合法
- Client從Registry下載所有的層
- Registry從后端存儲中獲取實際的文件數據,返給Client
Registry配置
1.啟動Registry容器
sudo docker run –d –p 80:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:2
Registry服務默認會將上傳的鏡像保存在容器的/var/lib/registry,我們將主機的/opt/registry目錄掛載到該目錄,即可實現將鏡像保存到主機的/opt/registry目錄了。運行docker ps看一下容器情況:
說明我們已經啟動了Registry服務,打開瀏覽器輸入http://127.0.0.1:80/v2,出現下面情況說明Registry運行正常。
2.客戶機訪問Registry
對於需要訪問Registry倉庫的客戶機來說,首先需要修改/etc/sysconfig/docker的配置文件:添加 --insecure-registry 192.168.0.70:80
3.客戶端向Registry存放鏡像
首先,需要docker tag給需要上傳的鏡像文件打標。然后再從本地上傳鏡像到倉庫。
4.客戶端向倉庫Pull鏡像
在另外一台主機上使用pull從192.168.0.70的倉庫中把鏡像給Pull下來
通過以上操作就可以看到我們已經Pull的鏡像,然后可以運行此鏡像,開始你的應用之旅。到此應該說Registry基本搭建完成,但是仍然不適合實際的使用。因為不方便管理和查看到上傳的鏡像和權限設置。接下來我們介紹一個帶UI管理的倉庫管理軟件—【Portus】
Portus搭建篇
注:請勿將本篇作為上篇Registry安裝內容延續,以下內容為全新環境下的Portus搭建。
Portus安裝
Portus(by SUSE)是用於 Docker Registry API(v2)的開源前端和授權工具,最低要求注冊表版本是 2.1。它可以作為授權服務器和用戶界面,用於新一代的 Docker Registry。具有以下優點:
1.)安全:Portus 實現了最新的Docker Registry中定義的新的授權方案。它允許對你所有的鏡像進行細顆粒度控制,你可以決定哪個用戶和團隊可 push/pull 鏡像。
2.)輕松管理用戶: 在 Portus 映射你的公司,可以定義任意數量的 Team,並從 Team 添加和移除用戶。Team 有三種類型的用戶:Viewers ,只能 pull 鏡像;Contributors,可以 push/pull 鏡像;Owners,類似 contributors,但可以從 team 添加或移除用戶。
3.)搜索: Portus 提供你的私人注冊表的內容的預覽,同時有一個快速搜索鏡像的功能。
4.)審計: 用戶的所有相關事件都會被Portus自動記錄,並可被管理員進行用戶分析。
1.安裝Docker-Compose
首先,yum添加源
[ root@bogon]# yum -y install epel-release
安裝python-pip
[root@ bogon]# yum -y install python-pip
安裝docker-compose
pip install -U docker-compose
到這里docker-compse就完成了。
2.從Git到Portus的代碼搭建
正常安裝方法: 需要到Git Clone https://github.com/SUSE/Portus.git上獲取Portus的源碼。下載包Portus_git.tar.gz,解壓此源碼包,並修改Gemfile.lnk 的第一行:“https://rubygems.org”修改為“http://rubygems.org”。運行compose-setup.sh -e server IP。進行構建安裝。(此處省略掉)
由於Portus在安裝過程中,需要下載幾個依賴的鏡像包,例如: Portus安裝依賴MariaDB,portus_web.tar、rails4.2.2tar,Registry2.1.1.tar安裝過程中下載比較慢。我們先下載了再進行安裝過程。
由於我先把這幾個已經下載完成,所以首先拷貝到宿主機的目錄中了,需要直接解壓。
3. 安裝Portus程序
安裝之前需要把拷貝到宿主機中的幾個依賴鏡像給load到Images中。
關於Registry的存儲路徑修改,請在安裝前先到compose中修改docker-compose.yml.template文件。這里面包含web端口和掛載volumes等參數。然后,再執行安裝腳本 ./compose-setup.sh -e 192.168.0.70。(由於本實例重新安裝了Registry,所以,此處宿主機和容器的端口都是5000。)
然后到Portus源代碼文件中執行./compose-setup.sh。
到此,Portus的安裝已經完成.。
4. 修改Docker配置文件
此時,我們還需要修改vi /lib/systemd/system/docker.service 把--insecure-registry 192.168.0.70:5000這句加到ExecStart=/usr/bin/docker這個配置項后。
重啟Docker
systemctl daemon-reload systemctl restart docker
重啟portus容器
docker start portus_db_1 portus_web_1 portus_crono_1 portus_registry_1
可以在瀏覽器中打開登錄窗口。
在客戶機中需要修改 /etc/sysconfig/docker下的文件。
Portus配置與驗證
1.登錄配置程序
Portus的登錄界面需要創建用戶名和密碼。然后進行Registry的設置。
創建test01和test02帳戶,並Enabled帳戶,然后進行登錄測試。
2.上傳鏡像測試
3.下載鏡像測試
總結
Docker Registry的創建私有倉庫的方法有很多種。像京東的Docker鏡像存儲系統--Speedy,Registry+Nginx &SSL等后續將進一步探究, 實現開發、測試以及生產的一體化流程,敬請期待!
本文電子書下載:
網頁下載:
http://www.cloudsoar.com/down/ddoc/v1.1/
百度雲盤下載:
[http://pan.baidu.com/s/1jHfP9Dc](http:// http://pan.baidu.com/s/1jHfP9Dc)
博客期刊:
http://www.cloudsoar.com/about ... v1.1/
_________________________________________________________________________________________________________
溫馨提示:
雲舒網絡攜手Rancher Labs推出【Rancher | 實戰微信群】,在線為您分享Docker技術干貨,更有往期回顧精選期刊等你拿!
本群匯集了Rancher中國最強技術精英團隊及業內技術派高人,宗旨是為了大家擁有更專業的平台交流Rancher實戰技術,實時與Rancher創始團隊面對面!同時歡迎各位分享自己的經驗、疑難問題,我們將定期邀請分享嘉賓做各類話題分享及回顧,共同實踐研究Docker容器生態圈。
對Rancher和Docker技術感興趣、或對本文中細節需繼續探討的朋友,歡迎加入本群參與討論!
加微信群方法:
1.關注【雲舒網絡】公眾號
2.留言”我要加群”
QQ群號:216521218