關於【Registry】
- 官方的【Docker hub】是一個用於管理公共鏡像的好地方,我們可以在上面找到我們想要的鏡像,也可以把我們自己的鏡像推送上去。但是,有時候,我們的使用場景需要我們擁有一個私有的鏡像倉庫用於管理我們自己的鏡像。這個可以通過開源軟件Registry來達成目的。
- 【Registry】在github上有兩份代碼:老代碼庫和新代碼庫。老代碼是採用python編寫的,存在pull和push的性能問題,出到0.9.1版本之後就標誌爲deprecated(查看更多信息=》https://github.com/docker/distribution),不再繼續開發。
- 從2.0版本開始就到在新代碼庫進行開發,新代碼庫是採用go語言編寫,修改了鏡像id的生成算法、registry上鏡像的保存結構,大大優化了pull和push鏡像的效率。【Registry2.0】=》https://hub.docker.com/_/registry/
【Regisry可以做什麼?】
- 嚴格的控制鏡像的存儲位置(tightly control where your images are being stored);
- 完全擁有鏡像分發管道(fully own your images distribution pipeline);
- 將鏡像存儲和分發緊密集成到內部開發工作流中(integrate image storage and distribution tightly into your in-house development workflow);
注:關於【Registry】的官網介紹=》https://docs.docker.com/registry/
如何部署 Registry ?
- 從【Docker Hub】下載 registry 鏡像=》docker pull registry 下載的默認版本爲 docker.io/registry latest
- 運行 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目錄了。
- 查看運行的容器 =》docker ps / docker container ls 若查看所有,添加參數 -a
- 若 registry 容器啓動運行,在瀏覽器輸入【http://docker主機ip:5000/v2/】查看,若輸出 =》{} 說明 registry 運行正常
【測試 registry】
- 上傳鏡像到registry,首先將主機的 registry 鏡像命名爲符合倉庫要求的格式 =》【registry_url:port/ImageName:tag】
--1.先標記鏡像格式
docker tag nginx:latest localhost:5000/nginx:latest
--2.把標記格式的鏡像推送到registy
docker push localhost:5000/nginx:latest
--注:localhost 爲本地環境的ip地址;
- 查看本地所有鏡像列表
docker images -a 或 docker image ls -a
-
從本地 registry 倉庫拉取鏡像
docker pull localhost:5000/nginx:latest
--注:localhost 爲本地環境的ip地址;
這一步可能出現無法推送鏡像(push)到私有倉庫的問題,提示:
The push refers to a repository [localhost:5000/nginx:latest]
The https://localhsot:5000/v2/: http:server gave HTTP response to HTTPS client
1、原因是本地啓動的 registry 服務不是安全可信任的;
2、解決方案,修改客戶端 docker 的配置文件 /etc/docker/daemon.json 添加 registry 服務地址
{
"registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"],"insecure-registries": ["localhost:5000"]
}
--備註:
1.加速鏡像設置 =》"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"] 是阿里雲代理的Registry Hub倉庫的地址,可以加快國內訪問【Registry Hub】倉庫的速度;
2.私有倉庫鏡像設置 =》"insecure-registries": ["localhost:5000"] 是本地【Registry】服務地址,localhost 爲當前 docker 主機ip;
3、【daemon.json】 存放路徑=》 cd /etc/docker
4、查看/編輯 daemon.json 文件配置信息 =》 vi daemon.json
5、退出並保存 =》:wq
修改好後重啓 Docker 服務 daemon.json 配置才生效,執行命令 =》systemctl restart docker , 再次push即可成功,查看本地 /opt/registry 目錄下面(或者瀏覽器輸入 http://localhost:5000/v2/_catalog)
- 或者使用以下命令查看本地私有倉庫裏面的鏡像信息
- curl -XGET http://registry:5000/v2/_catalog
- curl -XGET http://registry:5000/v2/image_name/tags/list
【附:鏡像加速地址】
- 阿里雲鏡像加速器=》https://help.aliyun.com/document_detail/60750.html
- 網易雲鏡像加速器=》https://hub-mirror.c.163.com
- 官方中國鏡像加速器=》https://regisry.docker-cn.com
- Ustc 鏡像加速器=》https://docker.mirrors.ustc.edu.cn
以上步驟就實現了本地部署 Registry 的過程,感興趣的小夥伴,趕快動手跟着小c老師一步一步的實現吧!