Docker提供了開放的中央倉庫dockerhub,同時也允許我們使用registry搭建本地私有倉庫。搭建私有倉庫有如下的優點:
- 節省網路頻寬,提升Docker部署速度,不用每個鏡像從DockerHub上去下載,只需從私有倉庫下載就可;
- 私有鏡像,包含公司敏感資訊,不方便公開對外,只在公司內部使用。
1.1下載鏡像registry
1
$ docker pull registry
1.2啟動容器
1
$ docker run -d -p 5000:5000 --restart=always --name=registry-srv -v /mydata/dockerRegistry:/var/lib/registry registry
解釋一下:
1
2
3
4
5
-d:後臺運行
-p:將容器的5000埠映射到宿主機的5000埠
--restart:docker服務重啟後總是重啓此容器
--name:容器的名稱
-v:將容器內的/var/lib/registry映射到宿主機的/mydata/dockerRegistry目錄
私有倉庫搭建好了,怎麼查看倉庫裏的鏡像,搭建一個web服務,查看修改image比較方便。
2.1下載鏡像
1
$ docker pull hyper/docker-registry-web
2.2啟動容器
1
docker run -it -p 8080:8080 --restart=always --name registry-web --link registry-srv -e REGISTRY_URL=http://registry-srv:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
解釋一下:
1
2
3
-it:以互動模式運行
--link:連結其它容器(registry-srv),在此容器中,使用registry-srv等同於registry-srv容器的局域網地址
-e:設定環境變數
例如,將本地的hcharts上傳到倉庫
1
2
$ docker images | grep hcharts
cbbing/hcharts latest 64164ca3dafe 3 weeks ago 550 MB
3.1修改鏡像tag
1
$ docker tag cbbing/hcharts 192.168.1.87:5000/cbbing/hcharts
3.2上傳tag鏡像到倉庫
1
2
3
4
5
6
docker push 192.168.1.87:5000/cbbing/hcharts
The push refers to a repository [192.168.1.87:5000/hcharts]
96b641920005: Pushing [===> ] 8.852 MB/125.1 MB
ee2881ef910e: Pushing [==> ] 11.69 MB/232.7 MB
36018b5e9787: Pushing [===> ] 11.99 MB/192.5 MB
3.3會出現的push失敗
1
2
3
$ docker push 192.168.1.87:5000/hcharts
The push refers to a repository [192.168.1.87:5000/hcharts]
Get https://192.168.1.87:5000/v1/_ping: http: server gave HTTP response to HTTPS client
這是因為Docker在1.3.x之後默認docker registry使用的是https,為了解决這個問題,修改本地主機的docker啟動設定檔,添加
1
--insecure-registry 192.168.1.87:5000
我的macbook在圖形化終端上修改如下,填寫後“Apply&Restart”。
3.4下載鏡像
在另外的客戶機上pull鏡像,跟拉取DockerHub上的鏡像是一樣的流程。
1
$ docker pull 192.168.1.87:5000/hcharts
訪問:http://192.168.1.87:8080/,網頁上呈現:
1,https://store.docker.com/images/registry2,https://store.docker.com/community/images/hyper/docker-registry-web