docker 私有 repository

为什么需要私有仓库?

  首先假如公司内部有两台以上的服务器,使用docker管理应用程序,我在A服务器上创建了一个.net core 的镜像,需要在B服务器上共享这个镜像,怎么办?当然不能拷贝一份代码在去B服务器创建上去创建,服务器少,以及版本迭代少的拷贝没问题,如果服务器多了,版本迭代多了,每次都拷贝粘贴不得把人累死,创建私有就不一样了,一个命令即可。

  其次就是内网且多服务器的情况下,就必须有个私有仓库了。

创建私有仓库

1、拉取 registry 镜像 :

   docker pull registry

2、运行容器:

  docker run -d -v /repositories:/var/lib/registry -e REGISTRY_STORAGE_DELETE_ENABLED=true -p 5000:5000 --restart=always --privileged=true --name registry registry

   //   -e REGISTRY_STORAGE_DELETE_ENABLED=true 设置仓库是可以删除的

  看运行是否成功,浏览器访问:http://192.168.0.109:5000/v2

3、提交一个镜像

  首先修改文件 /etc/docker/daemon.json (是个json文件,如果没有就创建)

  添加  "insecure-registries":["192.168.0.100:5000"]  --如果不添加这段,只能用https的方式 ,(insecure:不安全的)

  docker image tag elasticsearch:6.7.0 192.168.0.100:5000/elasticsearch   --打一个tag

   docker push 192.168.0.100:5000/elasticsearch

4、在其他机器拉取镜像,同样需要开启不安全的仓库

  docker pull 192.168.0.100:5000/elasticsearch

5、查询私有仓库有哪些镜像

   GET http://192.168.0.100:5000/v2/_catalog  // 查询镜像列表

   GET http://192.168.0.100:5000/v2/{image_name}/tags/list    // 查询单个镜像的tags

      HEAD http://192.168.0.100:5000/v2/{image_name}/manifests/1.0.0    // 查询单个镜像的Digest,说是那么说,用postman查出来不对,

      docker inspect {image_name}    // 查询镜像详细信息,是一个json,RepoDigests 项 就是 image 的 digest

   DELETE  http://192.168.0.100:5000/v2/{image_name}/manifests/{Digest}    // 删除镜像

   api地址:https://github.com/docker/distribution/blob/master/docs/spec/api.md

有时候要用到域名,公司内部搭一个dns服务器,非docker 仓库的linux需要修改dns的地址,指向dns服务器来找到 registry.xxx.com ,附上修改方法:

--打开配置文件

sudo vim /etc/resolv.conf

--添加 nameserver dns服务器的地址

nameserver 192.168.0.101

esc -> :wq // (保存)

立即生效,ping registry.xx.com 就可以通了。

原文地址:https://www.cnblogs.com/wh-blog/p/10707131.html