咱們知道可使用hub.docker.com做爲咱們公共或者私有的registry。但因爲服務器在國外的緣由,網速會很是的慢。
因此咱們在利用docker開發構建容器服務時,咱們但願可以創建本身的私有registry,上傳鏡像值咱們的私有registry中心,而後在其餘物理機上部署的時候,能夠快速的pull,而後實現大規模的分發以及部署,提升效率。
下面將會說一下如何經過registry容器實現這個nginx
環境:centos7.0, docker1.13.1版本docker
docker1.12版本之後,docker的可執行文件從/usr/bin/docker變成了/ussr/bin/dockerd,每個版本在不一樣的環境下,dockerd的daemon都是不一樣的配置,具體的要根據docker官網的指導進行配置。咱們在網上能夠看到不少關於如何配置docker的daemon啓動參數教程,以及一些出現的問題,其實大部分都是講的比較亂的,或者不根據本身的實際系統和docker版本去肯定如何配置的,由於不一樣的系統版本和docker版本具體的opts的選項是不一樣的,這個配置的文件的位置也是不同的,若是沒清楚整個區別,就跟着網上的改來改去,最後配置仍是沒能生效。json
(1)無認證的registry
在環境中,dockerd的配置文件在/etc/docker/daemon.json中,若是沒有該文件,能夠手動建立。
第一步:pull docker官方的registry的第二個版本,docker1.6版本以上支持registry2
docker pull registry:2.6.0vim
或者docker pull registry 不指定版本,表示latest版本centos
第二步:配置daemon.json,去掉docker默認的https的訪問
vim /etc/docker/daemon.json
裏面的內容是一個json對象,加上一項insecure-registries,地址本身更改:
{
"insecure-registries":["192.168.1.78:5000"]
}
而後重啓docker,執行
systemctl daemon-reload docker
systemctl restart docker
第三步:無認證啓動registry容器
docker run -d --name registry -p 5000:5000 --restart=always -v /opt/registry/:/var/lib/registry/ registry:2.6.0
上傳到私有鏡像的鏡像到時是默認存放在容器的/var/lib/registry/,爲了防止刪除registry,上傳的鏡像也被刪除,因此啓用一個volume,將上傳的鏡像持久化保存在咱們物理機上,這裏保存位置是/opt/registry/
第四步:測試是否啓動容器
curl http://192.168.1.78:5000/v2/_catalog服務器
若是返回{"repositories":[]},表明啓動成功了!curl
第五步:測試上傳到咱們本身的私有registry
將nginx這個鏡像重命名tag
docker tag nginx 192.168.1.78:5000/mynginx
這裏須要注意的是重命名的tag必須帶有創建192.168.1.78:5000/這個前綴,後面的mynginx是新鏡像名。
而後開始進行push到咱們創建的私有registry
docker push 192.168.1.78:5000/mynginx
再經過運行
curl http://192.168.1.78:5000/v2/_catalog
能夠看到返回{"repositories":["mynginx"]}
說明已經push到了本身的registry
第六步:測試pull
一樣仍是在本機上進行pull
首先刪除本機存在的鏡像192.168.1.78:5000/mynginx(剛纔經過tag重命名的)
docker rmi 192.168.1.78:5000/mynginx
而後
docker images
能夠看到已經沒有了192.168.1.78:5000/mynginx這個鏡像
下面開始pull這個鏡像
docker pull 192.168.1.78:5000/mynginx
而後再看
docker images
能夠看到出現這個192.168.1.78:5000/mynginx
說明pull成功了
第七步:在其餘的物理機上pull這個鏡像
一樣須要在安裝docker,而後再/etc/docker/daemon.json這個文件中
添加insecure-registries,ip地址本身更改:
{
"insecure-registries":["192.168.1.78:5000"]
}
而後重啓docker,執行
ststemctl daemon-reload docker
systemctl restart docker
docker pull 192.168.1.78:5000/mynginx
這樣子就能夠從本身的registry拉取鏡像了,固然也能夠上傳鏡像
假若有一個mynginx:1.1
docker tag 192.168.1.78:5000/mynginx 192.168.1.78:5000/mynginx:1.1
docker push 192.168.1.78:5000/mynginx:1.1
其實192.168.1.78:5000/這個就是創建的私有registry的地址
無認證的registry已經完成了,特別在局域網內部開發或者線上部署時很是有用!
下一節將會總結一下關於認證模式的registry,歡迎留意!測試