參考:html
http://www.javashuo.com/article/p-ohipinrh-bu.htmlpython
官方的Docker hub是一個用於管理公共鏡像的好地方,咱們能夠在上面找到咱們想要的鏡像,也能夠把咱們本身的鏡像推送上去。可是,有時候,咱們的使用場景須要咱們擁有一個私有的鏡像倉庫用於管理咱們本身的鏡像。這個能夠經過開源軟件Registry來達成目的。git
Registry在github上有兩份代碼:老代碼庫和新代碼庫。老代碼是採用python編寫的,存在pull和push的性能問題,出到0.9.1版本以後就標誌爲deprecated,再也不繼續開發。從2.0版本開始就到在新代碼庫進行開發,新代碼庫是採用go語言編寫,修改了鏡像id的生成算法、registry上鏡像的保存結構,大大優化了pull和push鏡像的效率。github
官方在Docker hub上提供了registry的鏡像(詳情),咱們能夠直接使用該registry鏡像來構建一個容器,搭建咱們本身的私有倉庫服務。算法
1. 運行下面命令獲取registry鏡像docker
docker pull registryjson
下載到的版本默認爲 docker.io/registry latest 瀏覽器
2. 將registry鏡像運行並生成一個容器安全
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latestcurl
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 拉取。