天天看點

docker-建立私有registry(一)

我們知道可以使用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,歡迎留意!