【Docker實戰】Registry & Portus搭建詳解


原文鏈接

【編者的話】本文根據雲舒網絡博客整理發布。文章詳細介紹了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

1.png



2.Registry安裝 

由於Docker和Registry更新比較快,所以我們在此宿主機中進行安裝的時候,選擇Registry2.1版本進行安裝。

yum -y install docker-registry

2.png



3.png



至此,Docker和registry的安裝已經完成,下面開始進行配置和測試。

5.png



注:安裝完成后需要對Docker和Registry進行enable and start。

Registry原理

Docker模型的核心部分是有效的利用分層鏡像機制,鏡像可以通過分層來進行繼承,基於基礎鏡像,可以制作各種具體的應用鏡像。不同的Docker容器可以共享一些基礎的文件系統層,同時再加上自己獨有的改動層,大大提高了存儲的效率。由於最終鏡像最終是以tar.gz的方式靜態存儲在服務器端,這種存儲適用於對象存儲而不是塊存儲。

一次docker pull 發生的交互


6.png

 

  1. Client向Index請求,知道從哪里下載CentOS
  2. Index回復
  3. CentOS在RegistryA
  4. CentOS的Checksum,所有層的Token
  5. Client向Registry A請求, CentOS的所有層。Registry A負責存儲CentOS,以及它所依賴的層、
  6. Regsitry A向Index發起請求,驗證用戶Token的合法性
  7. Index返回這次請求是否合法
  8. Client從Registry下載所有的層
  9. Registry從后端存儲中獲取實際的文件數據,返給Client


Registry配置

1.啟動Registry容器

sudo docker run –d –p 80:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:2

8.jpg



Registry服務默認會將上傳的鏡像保存在容器的/var/lib/registry,我們將主機的/opt/registry目錄掛載到該目錄,即可實現將鏡像保存到主機的/opt/registry目錄了。運行docker ps看一下容器情況:

7.png



說明我們已經啟動了Registry服務,打開瀏覽器輸入http://127.0.0.1:80/v2,出現下面情況說明Registry運行正常。

9.0_.png



2.客戶機訪問Registry

對於需要訪問Registry倉庫的客戶機來說,首先需要修改/etc/sysconfig/docker的配置文件:添加 --insecure-registry 192.168.0.70:80

9.1_.jpg



3.客戶端向Registry存放鏡像

首先,需要docker tag給需要上傳的鏡像文件打標。然后再從本地上傳鏡像到倉庫。

9.1_.jpg



4.客戶端向倉庫Pull鏡像

在另外一台主機上使用pull從192.168.0.70的倉庫中把鏡像給Pull下來

9.3_.png



9.4_.jpg



通過以上操作就可以看到我們已經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

10.jpg



到這里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。進行構建安裝。(此處省略掉)

11.png



由於Portus在安裝過程中,需要下載幾個依賴的鏡像包,例如: Portus安裝依賴MariaDB,portus_web.tar、rails4.2.2tar,Registry2.1.1.tar安裝過程中下載比較慢。我們先下載了再進行安裝過程。

12.png



由於我先把這幾個已經下載完成,所以首先拷貝到宿主機的目錄中了,需要直接解壓。

13.jpg



3. 安裝Portus程序

安裝之前需要把拷貝到宿主機中的幾個依賴鏡像給load到Images中。

14.jpg



關於Registry的存儲路徑修改,請在安裝前先到compose中修改docker-compose.yml.template文件。這里面包含web端口和掛載volumes等參數。然后,再執行安裝腳本 ./compose-setup.sh -e 192.168.0.70。(由於本實例重新安裝了Registry,所以,此處宿主機和容器的端口都是5000。)

15.png



然后到Portus源代碼文件中執行./compose-setup.sh。

16.jpg



到此,Portus的安裝已經完成.。

4. 修改Docker配置文件

此時,我們還需要修改vi /lib/systemd/system/docker.service 把--insecure-registry 192.168.0.70:5000這句加到ExecStart=/usr/bin/docker這個配置項后。

17.png



重啟Docker

systemctl daemon-reload systemctl restart docker

重啟portus容器
docker start portus_db_1 portus_web_1 portus_crono_1 portus_registry_1

可以在瀏覽器中打開登錄窗口。

18.png



在客戶機中需要修改 /etc/sysconfig/docker下的文件。

17.png



Portus配置與驗證 

1.登錄配置程序

Portus的登錄界面需要創建用戶名和密碼。然后進行Registry的設置。

20.png



21.png



22.png



創建test01和test02帳戶,並Enabled帳戶,然后進行登錄測試。

2.上傳鏡像測試

23.jpg



24.png



25.png



3.下載鏡像測試

26.jpg



總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM