docker 筆記 (6)搭建本地registry

轉:http://blog.csdn.net/felix_yujing/article/details/51564739python

新版 registry v2對鏡像存儲格式進行了從新設計,而且和舊版還不兼容。registry v2是由go語言開發,docker從1.6版本開始支持registry v2,以前python開發的老版registry在網上已被標爲廢棄了(沒有維護更新,但也能夠用)。

以前在測試環境搭建了一個老版的registry,用了也比較久了。爲了跟上技術的腳步,也準備從此使用新版registry v2。因爲對舊版是不兼容的,因此以前倉庫的數據目錄還不能直接拿來掛載,只好從新作個新的,鏡像只好等之後慢慢再放上去了。下面對我此次配置的步驟簡單的介紹一下。

0. 服務器環境
本次使用centos7.1的操做系統,服務器IP假設爲:192.168.0.100
預先裝好docker服務,操做以下:docker

 
  1. yum install docker -y  
  2. systemctl enable docker  
  3. systemctl start docker  


1. 獲取最新的registry的容器
瞭解到目前最新版爲2.4.1,因而直接使用docker pull命令從公用倉庫去拉便可json

 
  1. docker pull registry:2.4.1  


2. 運行registry:2.4.1容器
這裏須要注意的是新registry倉庫數據目錄的位置。以前老版的位置是/tmp/registry,hub.docker.com上的演示命令裏寫的是/tmp/registry-dev,其實這個不對。試驗證實,新registry的倉庫目錄是在/var/lib/registry,因此運行時掛載目錄須要注意。centos

 
  1. docker run -d -p 5000:5000 --restart=always \  
  2.   -v /opt/registry-var/:/var/lib/registry/ \  
  3.   registry:2.4.1  

-v選項指定將/opt/registry-var/目錄掛載給/var/lib/registry/
當使用curl http://192.168.0.100:5000/v2/_catalog能看到json格式的返回值時,說明registry已經運行起來了。

3. 修改配置文件以指定registry地址
上面registry雖然已經運行起來了,可是若是想用push命令上傳鏡像是會報錯的,須要在配置文件中指定registry的地址。在/etc/sysconfig/docker文件中添加一下配置:安全

 
  1. ADD_REGISTRY='--insecure-registry 192.168.0.100:5000'  

爲了配置簡單,省去安全相關的配置,這裏使用--insecure-registry選項。
修改配置文件後,必定要重啓docker服務才能生效,因此:服務器

 
  1. systemctl restart docker  

這時再push就能夠上傳鏡像到所搭建的registry倉庫了。須要注意的是,上傳前要先給鏡像tag一個192.168.0.100:5000/爲前綴的名字,這樣才能在push的時候存到私庫。curl

 
  1. docker tag docker.io/registry:2.4.1 192.168.0.100:5000/registry:2.4.1  
  2. docker push 192.168.0.100:5000/registry:2.4.1  


4. 配置帶用戶權限的registry
到上面爲止,registry已經可使用了。若是想要控制registry的使用權限,使其只有在登陸用戶名和密碼以後才能使用的話,還須要作額外的設置。
registry的用戶名密碼文件能夠經過htpasswd來生成:測試

 
  1. mkdir /opt/registry-var/auth/  
  2. docker run --entrypoint htpasswd registry:2.4.1 -Bbn felix felix  >> /opt/registry-var/auth/htpasswd  

上面這條命令是爲felix用戶名生成密碼爲felix的一條用戶信息,存在/opt/registry-var/auth/htpasswd文件裏面,文件中存的密碼是被加密過的。
使用帶用戶權限的registry時候,容器的啓動命令就跟上面不同了,將以前的容器停掉並刪除,而後執行下面的命令:加密

 
  1. docker run -d -p 5000:5000 --restart=always \  
  2.   -v /opt/registry-var/auth/:/auth/ \  
  3.   -e "REGISTRY_AUTH=htpasswd" \  
  4.   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \  
  5.   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \  
  6.   -v /opt/registry-var/:/var/lib/registry/ \  
  7.   registry:2.4.1  

這時,若是直接想查看倉庫信息、pull或push都會出現權限報錯。必須先使用docker login 命令來登陸私有倉庫:url

 
  1. docker login 192.168.0.100:5000  

根據提示,輸入用戶名和密碼便可。若是登陸成功,會在/root/.docker/config.json文件中保存帳戶信息,這樣就能夠繼續使用了。

相關文章
相關標籤/搜索