Docker 建立私有鏡像倉庫 Registry
- 前序
-
- 下載下傳安裝Registry
前序
官方的Docker hub是一個用于管理公共鏡像的好地方,我們可以在上面找到我們想要的鏡像,也可以把我們自己的鏡像推送上去。但是,有時候,我們的使用場景需要我們擁有一個私有的鏡像倉庫用于管理我們自己的鏡像。這個可以通過開源軟體Registry來達成目的。
Registry在github上有兩份代碼:老代碼庫和新代碼庫。老代碼是采用python編寫的,存在pull和push的性能問題,出到0.9.1版本之後就标志為deprecated,不再繼續開發。從2.0版本開始就到在新代碼庫進行開發,新代碼庫是采用go語言編寫,修改了鏡像id的生成算法、registry上鏡像的儲存結構,大大優化了pull和push鏡像的效率。
官方在Docker hub上提供了registry的鏡像(詳情),我們可以直接使用該registry鏡像來建構一個容器,搭建我們自己的私有倉庫服務。
下載下傳安裝Registry
-
從鏡像倉庫下載下傳Registry
docker pull registry
-
建立持久化卷,并啟動Registry容器
docker volume create registry
docker run -itd -v registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
- 啟動完後,通路http://ip:5000/v2/驚醒驗證,可以看到Registry已經正常啟動了。
- 由于我們沒有配置https,是以要把倉庫位址加入Docker配置檔案的insecure-registries中,修改/etc/docker/daemon.json檔案,加入完後重新開機Docker
{
"registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries": ["ip:5000"]
}
systemctl daemon-reload
systemctl restart docker
5. 嘗試推送鏡像到Registry
通過将鏡像push到registry來驗證,首先将主機的registry鏡像命名為符合倉庫要求registry_url:port/ImageName:tag的格式
通過docker tag指令來實作命名
docker tag sqlapi:latest 10.16.9.110:5000/sqlapi:latest
通過指令 docker images 檢視本地鏡像,重新建立了一個鏡像
上傳jdk鏡像到Registry倉庫: docker push 10.16.9.110:5000/sqlapi:latest
6.通路http://10.16.9.110:5000/v2/_catalog,可以看到推送情況