簡介
倉庫(Repository)是集中存放鏡像的地方,又分爲公共鏡像和私有倉庫。
當我們執行docker pull xxx
的時候,它實際上是從registry.docker.com
這個地址去查找,這就是Docker公司爲我們提供的公共倉庫。在工作中,我們不可能把企業項目上傳到公共倉庫進行管理,所以爲了更多管理鏡像,Docker允許我們搭建本地私有倉庫。
私有倉庫最常用的就是registry
、Harbor
兩種,那接下來詳細介紹如何搭建私有倉庫。
搭建registry私有倉庫
Docker 官方提供了一個搭建私有倉庫的鏡像registry
,只需把鏡像下載下來,運行容器並暴露5000端口,就可以使用了。代碼如下:
1、下載鏡像
docker pull registry:2
2、運行容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
registry服務默認將上傳的鏡像保存在容器的
/var/lib/registry
,使用-v
參數將容器的/var/lib/registry目錄映射到本地/opt/registry目錄。即可實現將鏡像保存到宿主機/opt/registry目錄。
瀏覽器訪問http://宿主機IP:5000/v2
,顯示“{}
” 說明registry運行正常。
上傳鏡像到私有倉庫
現在通過push將鏡像上傳至私有倉庫,具體步驟如下:
1、下載docker hub官方鏡像
docker pull ubuntu
2、將鏡像標誌爲要推送到私有倉庫:
docker tag ubuntu:latest 10.43.187.251:5000/myubuntu:v1
3、上傳鏡像到私有倉庫
[root@qll251 ~]# docker push 10.43.187.251:5000/myubuntu:v1
The push refers to repository [10.43.187.251:5000/myubuntu]
Get https://10.43.187.251:5000/v2/: http: server gave HTTP response to HTTPS client
注意,上傳鏡像時報錯了:http: server gave HTTP response to HTTPS client
出現這個問題原因是:Docker自從1.3.X之後docker registry交互默認使用的是HTTPS,但是搭建私有鏡像默認使用的是HTTP服務,所以與私有倉庫交互時出現以上錯誤。
解決辦法:
1、編輯 /etc/docker/daemon.json
,在文件中寫入:
{ "insecure-registries":["10.43.187.251:5000"] }
2、重啓生效:
systemctl daemon-reload
systemctl restart docker
再次上傳,問題解決:
docker pull 10.43.187.251:5000/myubuntu:v1
客戶端下載私有鏡像
我們在另外一臺docker機器上,進行pull測試:
[root@qll252 ~]# docker pull 10.43.187.251:5000/myubuntu:v1
Trying to pull repository 10.43.187.251:5000/myubuntu ...
Get https://10.43.187.251:5000/v1/_ping: http: server gave HTTP response to HTTPS client
會發現跟前面上傳鏡像報了同樣的錯誤。
解決方法同上:
再次從私有倉庫中下載鏡像:
[root@qll252 ~]# docker pull 10.43.187.251:5000/myubuntu:v1
Trying to pull repository 10.43.187.251:5000/myubuntu ...
v1: Pulling from 10.43.187.251:5000/myubuntu
d51af753c3d3: Pull complete
fc878cd0a91c: Pull complete
6154df8ff988: Pull complete
fee5db0ff82f: Pull complete
Digest: sha256:5747316366b8cc9e3021cd7286f42b2d6d81e3d743e2ab571f55bcd5df788cc8
Status: Downloaded newer image for 10.43.187.251:5000/myubuntu:v1
驗證通過,到此已完成私有倉庫的搭建工作了。
說明:在後續教程我們學習到
docker-compose
時,再爲大家介紹企業級Harbor私有倉庫及搭建過程。