在上篇我们可以将自己的项目部署在服务器上,多个项目都可以。但在使用时发现,现在使用的仓库为公有的,如果想用作商业方面,从数据安全角度这会是个比较大的漏洞,基于此,本篇来说说部署私有仓库来保存自己的镜像。
参考私有化可以采用本地部署或者是通过gitlab来进行管理。
本地部署:
- 下载仓库镜像
#从中央仓库拉取最新的 registry 仓库。
docker pull registry
- 创建仓库文件夹
#主要是映射到本地用来保存镜像的仓库
mkdir /mnt/myregistry
- 启动仓库
#其中端口为5000
docker run -d -p 5000:5000 --restart=always -v /mnt/myregistry:/var/lib/registry registry
- 查看仓库启动
docker ps
其结果如下:
- 地址访问
其中,ip为本地仓库ip地址。
curl http://192.168.234.97:5000/v2/_catalog
#或者直接在网页里输入以上地址
6. 测试
#使用hello-world镜像进行测试,创建本地 tag
docker tag hello-world 192.168.234.97:5000/hello
#其中,hello-world换成自己的镜像名,hello为自己取的编号
- 推送到本地仓库
docker push 192.168.234.97:5000/hello
- 查看本地仓库
curl http://192.168.234.97:5000/v2/_catalog
发现并没有新增进来,并进行报错:
The push refers to a repository [192.168.234.97:5000/hello]
Get https://192.168.234.97:5000/v1/_ping: http: server gave HTTP response to HTTPS client
从网站上找到需要修改配置文件
touch /etc/docker/daemon.json
#写入配置
echo '{ "insecure-registries":["192.168.234.97:5000"] }' > /etc/docker/daemon.json
#重新启动docker
systemctl restart docker
#再次尝试推送到本地仓库,可以成功
docker push 192.168.234.97:5000/hello
在经历这一套流程后发现
网上查到需要将.json修改为.conf,但这根本无法解决问题。
后来检查发现json的写法格式有问题,直接字典形式就可以了。
{
"insecure-registries":["公网ip(别把22端口加上了):5000"]
}
最后结果就出来了
9. 查看镜像
http://192.168.234.97:5000/v2/hello/tags/list
这样问题完美解决。
10. 本地下载
#这样便能将镜像下载在本地了
docker pull 127.0.0.1:5000/镜像名称:镜像版本号
例如:docker pull 127.0.0.1:5000/hello-world
然而,尽管可以将数据备份到本地,但是毕竟一个镜像大小就一两个G,特别占用资源。后面将写写企业级部署harbor以及gitlb部署。
未完待续… …
参考文章:
https://blog.csdn.net/lihao21/article/details/104274289
https://www.jianshu.com/p/a32c5a8d5ac0
https://www.sohu.com/a/327351423_468635