在上篇我们可以将自己的项目部署在服务器上,多个项目都可以。但在使用时发现,现在使用的仓库为公有的,如果想用作商业方面,从数据安全角度这会是个比较大的漏洞,基于此,本篇来说说部署私有仓库来保存自己的镜像。
参考私有化可以采用本地部署或者是通过gitlab来进行管理。
本地部署:

  1. 下载仓库镜像
#从中央仓库拉取最新的 registry 仓库。
docker pull registry
  1. 创建仓库文件夹
#主要是映射到本地用来保存镜像的仓库
mkdir /mnt/myregistry
  1. 启动仓库
#其中端口为5000
docker run -d -p 5000:5000 --restart=always -v /mnt/myregistry:/var/lib/registry  registry
  1. 查看仓库启动
docker ps

其结果如下:

replit部署java replit部署docker_数据库

  1. 地址访问
    其中,ip为本地仓库ip地址。
curl http://192.168.234.97:5000/v2/_catalog
#或者直接在网页里输入以上地址

replit部署java replit部署docker_json_02


6. 测试

#使用hello-world镜像进行测试,创建本地 tag
docker tag hello-world 192.168.234.97:5000/hello
#其中,hello-world换成自己的镜像名,hello为自己取的编号
  1. 推送到本地仓库
docker push 192.168.234.97:5000/hello
  1. 查看本地仓库
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

在经历这一套流程后发现

replit部署java replit部署docker_推送_03


网上查到需要将.json修改为.conf,但这根本无法解决问题。

后来检查发现json的写法格式有问题,直接字典形式就可以了。

{
  "insecure-registries":["公网ip(别把22端口加上了):5000"]
}

最后结果就出来了

replit部署java replit部署docker_推送_04


9. 查看镜像

http://192.168.234.97:5000/v2/hello/tags/list

replit部署java replit部署docker_推送_05


这样问题完美解决。

10. 本地下载

#这样便能将镜像下载在本地了
docker pull 127.0.0.1:5000/镜像名称:镜像版本号
例如:docker pull 127.0.0.1:5000/hello-world

然而,尽管可以将数据备份到本地,但是毕竟一个镜像大小就一两个G,特别占用资源。后面将写写企业级部署harbor以及gitlb部署。

未完待续… …

参考文章:

https://www.jianshu.com/p/a32c5a8d5ac0 https://www.sohu.com/a/327351423_468635