為什么需要私有倉庫?
首先假如公司內部有兩台以上的服務器,使用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 就可以通了。