? ? ? ?Docker在2015年推出了distribution項目,即Docker Registry 2。相比于old registry,Registry 2使用Go實現,在安全性、性能方面均有大幅改進。Registry設計了全新的Rest API,并且在image存儲格式等方面不再兼容于old Registry。去年8月份,docker官方hub使用Registriy 2.1替代了原先的old Registry。如果你要與Registry2交互,你的Docker版本至少要是Docker 1.6。docker-Registry?具有以下優點
1、節省網絡帶寬,針對于每個鏡像不用每個人都去中央倉庫上面去下載,只需要從私有倉庫中下載即可;
2、提供鏡像資源利用,針對于公司內部使用的鏡像,推送到本地的私有倉庫中,以供公司內部相關人員使用。
環境準備,兩臺Centos7?機器
?
192.168.10.62? docker?版本1.12.6?用作開發機器
192.168.10.61? docker?版本?1.12.6?用作私有倉庫
?
?
搭建私有倉庫
?
下載鏡像
?
docker pull registry:2.3
?
?
啟動鏡像
mkdir –p /opt/data/registry
?
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry?
?
指定本地一個目錄/opt/data/registry掛載到容器內的/var/lib/registry下
?
docker ps
CONTAINER ID??????? IMAGE?????????????? COMMAND????????????????? CREATED???????????? STATUS????????????? PORTS??????????????????? NAMES
9819f1221756??????? registry? ??????????"/entrypoint.sh /etc/"?? 3 hours ago???????? Up 36 minutes?????? 0.0.0.0:5000->5000/tcp?? amazing_khorana
?
?
測試
?
在?192.168.10.62?開發機器上面提交鏡像
?
從docker hub?上獲取鏡像consul
?
docker pull consul:1.0.0
?
?
更改鏡像tag
?
docker tag docker.io/consul:1.0.0 192.168.10.61:5000/consul
?
?
提交鏡像至私有倉庫
?
docker push 192.168.10.61:5000/consul
?
報錯
The push refers to a repository [192.168.10.61:5000/consul]
Get https://192.168.10.61:5000/v1/_ping: http: server gave HTTP response to HTTPS client
?
因為Docker從1.3.X之后,與docker registry交互默認使用的是https,然而此處搭建的私有倉庫只提供http服務,所以當與私有倉庫交互時就會報上面的錯誤。為了解決這個問題需要在啟動docker server時增加啟動參數為默認使用http訪問。
?
解決方法:修改docker?啟動配置文件
?
CentOS:編輯?/etc/sysconfig/docker?文件,添加如下行:
other_args="--insecure-registry 192.168.10.61:5000"
重啟?Docker daemon:
systemctl restart docker
?
?
Ubuntu:編輯?/etc/default/docker?文件,添加如下行
?
DOCKER_OPTS="--insecure-registry 192.168.10.61:5000"
重啟?Docker daemon:
sudo systemctl restart docker
?
?
再次提交
?
docker push 192.168.10.61:5000/consul
?
?
刪除本地鏡像
?
docker rmi 192.168.10.61:5000/consul:latest
?
從私有倉庫拉取鏡像
?
docker pull 192.168.10.61:5000/consul
?
?
docker?私有倉庫查看已經提交的鏡像
?
docker search 192.168.10.61:5000/consul
Error response from daemon: Unexpected status code 404
?
奇怪從docker?開發機器已經正常提交,在開發機本地刪除鏡像,也可以從私有倉庫獲取,為什么查不到呢
?
通過各種查詢資料,使用?registry v2?的?api?可以查看已經提交的docker?鏡像
?
curl??http://192.168.10.61:5000/v2/_catalog
?
{"repositories":["busybox","consul","nginx"]}
本文轉自 水滴石川1 51CTO博客,原文鏈接:http://blog.51cto.com/sdsca/1974261,如需轉載請自行聯系原作者