保存和分發鏡像的最直接的方法就是使用Docker H u b,它是Docker公司維護的公共Regsitry,用戶可以將自己的鏡像保存到Docker H u b 免費的repository中。如果不希望別人訪問自己的鏡像,也可以購買私有repository.
一般我們可以使用Docker H u b上傳和下載鏡像,雖然十分方便,但是還是有些限制,比如:
1、需要外網連接,而且上傳和下載速度慢
2、上傳到Docker H u b 的鏡像任何人都能夠訪問,雖然可以用私人repositroy,但不是免費的
3、因爲安全原因很多組織不允許將鏡像放到外網
解決方法是單間本地的Registry。
Docker已經將Registry開源了,同時在Docker H u b上也有官方的鏡像Registry。
我們可以在Docker中運行自己的Registry
使用dockerfile構建httpd
在使用倉庫之前,首先我們構建一個httpd鏡像,保存到本地中
首先創建dockerfile目錄和創建dokcerfile文件
cd ~
mkdir dokcerfile
cd dockerfile
touch dockerfie
按照如下編輯dockerfile
然後構建http鏡像
docker build -t httpd:v11 -f dockerfile /root/dockerfile
如下所示,構建成功
檢查鏡像
docker images
啓動registry容器
首先在根目錄下創建/myregistry目錄用於存放鏡像數據
本次使用鏡像是registry:2
cd /
mkdir /myregistry
使用如下命令創建registry容器
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
說明:
1、-d 後臺啓動容器
2、-p 將容器的5000端口映射到Host的5000端口。5000是registry服務端口
3、-v 將容器的/var/lib/regsitry目錄映射給Host的/myregistry,用於存放鏡像數據
通過docker tag重命名鏡像,使之與registry匹配,如下所示:
docker tag yangchao/httpd:v1 127.0.0.1:5000/yangchao/httpd:v1
將httpd:v11更改爲Registry要求的格式,格式如下:
只有Docker Hub上的鏡像可以省略registry-host:[port]
按照如下方式,通過docker tag重命名鏡像,使之與registry匹配
docker tag httpd:v11 127.0.0.1:5000/yangchao/httpd:v11
使用dokcer image命令檢查鏡像
然後將yangchao/httpd:v11上傳到Registry
docker push 127.0.0.1:5000/yangchao/httpd:v11
然後查看Registry中的鏡像
curl 127.0.0.1:5000/v2/_catalog
可以在/myregistry目錄中查看相應的鏡像
至此本地registry就創建完畢