我們知道可以使用hub.docker.com作為我們公共或者私有的registry。但由于伺服器在國外的原因,網速會非常的慢。
是以我們在利用docker開發建構容器服務時,我們希望能夠建立自己的私有registry,上傳鏡像值我們的私有registry中心,然後在其他實體機上部署的時候,可以快速的pull,然後實作大規模的分發以及部署,提高效率。
下面将會說一下如何通過registry容器實作這個。
開源的基于swoole擴充實作的架構https://github.com/bingcool/swoolefy
環境:centos7.0, docker1.13.1版本
docker1.12版本以後,docker的可執行檔案從/usr/bin/docker變成了/ussr/bin/dockerd,每一個版本在不同的環境下,dockerd的daemon都是不同的配置,具體的要根據docker官網的指導進行配置。我們在網上可以看到很多關于如何配置docker的daemon啟動參數教程,以及一些出現的問題,其實大部分都是講的比較亂的,或者不根據自己的實際系統和docker版本去确定如何配置的,因為不同的系統版本和docker版本具體的opts的選項是不同的,這個配置的檔案的位置也是不一樣的,如果沒清楚整個差別,就跟着網上的改來改去,最後配置還是沒能生效。
(1)無認證的registry
在環境中,dockerd的配置檔案在/etc/docker/daemon.json中,如果沒有該檔案,可以手動建立。
第一步:pull docker官方的registry的第二個版本,docker1.6版本以上支援registry2
docker pull registry:2.6.0
或者docker pull registry 不指定版本,表示latest版本
第二步:配置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":[]},代表啟動成功了!
第五步:測試上傳到我們自己的私有registry
将nginx這個鏡像重命名tag
docker tag nginx 192.168.1.78:5000/mynginx
這裡需要注意的是重命名的tag必須帶有建立192.168.1.78:5000/這個字首,後面的mynginx是新鏡像名。
然後開始進行push到我們建立的私有registry
docker pull 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,歡迎留意!