docker仓库:
官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。
但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要Docker Registry,它可以用来存储和管理自己的镜像。
安装仓库:
运行仓库
docker run -d -p 5000:5000 -v /docker/images/:/var/lib/registry --name registry --restart=always registry
# 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/var/lib/registry下
# --restart=always 重启docker后会自动启动容器
registry为了安全性考虑,默认是需要https证书支持,故会报错
修改配置文件
vim /usr/lib/systemd/system/docker.service
Execstart 中加入--insecure-registry=ip:5000
systemctl daemon-reload
systemctl restart docker
上传镜像至私有仓库:
docker tag nginx ip:5000/nginx:1.0 #上传之前需要给tag打上标签,使其与仓库ip进行对应
docker push ip:5000/nginx:1.0 #上传
查看私有仓库中的镜像:
curl ip:5000/v2/_catalog #查看所有的镜像
curl ip:5000/v2/nginx/tags/list #查看镜像的所有版本
拉取镜像:
docker pull ip:5000/nginx:1.0 #仓库/镜像名:版本
删除镜像
1.启用删除API
2.获取哈希
3.进行逻辑上的删除
4.对其进行逻辑上的删除
5.删除对应的数据即存在_catalog中的数据
docker exec -it d697e31fae97 vi /etc/docker/registry/config.yml
#在rootdirectory: /var/lib/registry下面加入
delete.enabled:true
获取对应哈希256的值
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET 10.3.135.12:5000/v2/nginx(镜像名称)/manifests/1.0(版本号tag)
sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
curl -I -X DELETE 10.3.135.12:5000/v2/nginx/manifests/sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 #对其目标镜像进行逻辑删除
registry garbage-collect /etc/docker/registry/config.yml #在容器内执行清理垃圾
rm -rf /docker/images/docker/registry/v2/repositories/nginx #删除对应的数据
扩展添加webui
docker pull hyper/docker-registry-web
docker run -d -p 5000:5000 -v /docker/images/:/var/lib/registry --name registry --restart=always registry
docker run -d -p 8080:8080 --name registry-web --link registry -e REGISTRY_URL=http://192.168.10.11:5000/v2 -e REGISTRY_NAME=192.168.10.11:5000 hyper/docker-registry-web
#就有了web可视化页面没什么用处