參考:
https://www.cnblogs.com/soar1688/p/6828329.html
1. 關於Registry
官方的Docker hub是一個用於管理公共鏡像的好地方,我們可以在上面找到我們想要的鏡像,也可以把我們自己的鏡像推送上去。但是,有時候,我們的使用場景需要我們擁有一個私有的鏡像倉庫用於管理我們自己的鏡像。這個可以通過開源軟件Registry來達成目的。
Registry在github上有兩份代碼:老代碼庫和新代碼庫。老代碼是采用python編寫的,存在pull和push的性能問題,出到0.9.1版本之后就標志為deprecated,不再繼續開發。從2.0版本開始就到在新代碼庫進行開發,新代碼庫是采用go語言編寫,修改了鏡像id的生成算法、registry上鏡像的保存結構,大大優化了pull和push鏡像的效率。
官方在Docker hub上提供了registry的鏡像(詳情),我們可以直接使用該registry鏡像來構建一個容器,搭建我們自己的私有倉庫服務。
2. Registry的部署
1. 運行下面命令獲取registry鏡像
docker pull registry
下載到的版本默認為 docker.io/registry latest
2. 將registry鏡像運行並生成一個容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
Registry服務默認會將上傳的鏡像保存在容器的/var/lib/registry,將主機的/opt/registry目錄掛載到該目錄,即可實現將鏡像保存到主機的/opt/registry目錄了。
3. 運行docker ps看一下容器運行情況
4.registry容器啟動后,打開瀏覽器輸入http://ip_add:5000/v2/,看到下面情況說明registry運行正常
3. 測試上傳鏡像到Registry
通過將鏡像push到registry來驗證,首先將主機的registry鏡像命名為符合倉庫要求registry_url:port/ImageName:tag的格式,如圖
通過docker tag命令來實現命名
docker tag jdk_8u191:20190307 192.168.179.128:5000/jdk_8u191:20190307
通過命令 docker images 查看本地鏡像,重新創建了一個鏡像
上傳jdk鏡像到Registry倉庫: docker push 192.168.179.128:5000/jdk_8u191:20190307
注意:
可能會出現無法push鏡像到私有倉庫的問題。提示:
這是因為我們啟動的registry服務不是安全可信賴的。這時需要修改客戶端docker的配置文件/etc/docker/daemon.json,添加下面藍色的內容(registry服務地址):
{
"registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries": ["192.168.179.128:5000"]
}
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"] 是阿里雲代理的Registry Hub倉庫的地址,可以加快國內訪問Registry Hub倉庫的速度。
修改好之后需要重啟Docker服務才能生效,執行命令:systemctl restart docker ,再push即可。
push成功之后,查看本地/opt/registry目錄下已經有了剛推送上來的registry鏡像,也可以在瀏覽器中輸入http://ip_add:5000/v2/_catalog
或者使用以下命令查看:
# curl -XGET http://registry:5000/v2/_catalog
# curl -XGET http://registry:5000/v2/image_name/tags/list
至此,我們的Registry私有倉庫搭建完成,如果在今后中要使用,可以使用命令:docker pull ip_add:5000/jdk_8u191:20190307 拉取。