为什么需要私有仓库?
首先假如公司内部有两台以上的服务器,使用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 就可以通了。