说明:虚拟机cnetos7,选择2台虚拟机(192.168.25.131,192.168.25.132),一台也行。安装好docker,192.168.25.132作为搭建镜像仓库的虚机
- 在132机上下载registry镜像
docker pull registry
- 准备好启动registry的参数和文件准备
2.1 创建一个文件/data/config.yml,添加如下内容:
加了一行:storage:delete:enabled: true表示运行镜像删除,容器挂载后,会覆盖 docker仓库本身的config.yml文件
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
2.2 创建目录/opt/data/registry,用来挂载上传的镜像,一方容器被删除,镜像丢失
2.3 在/etc/docker/daemon.json添加地址,不然push时,docker客户端会发送https请求,导致push失败,指定特定ip发送http请求
vim /etc/docker/daemon.json
daemon.json 里面的内容ip+端口
{
"insecure-registries": ["192.168.25.132:5000"]
}
3 重启docker服务
systemctl daemon-reload //没有这一步也生效
systemctl restart docker
4.启动 registry容器(–privileged=true)增加权限,不然push会失败
docker run -d -p 5000:5000 --privileged=true -v /opt/data/registry:/var/lib/registry -v /data/config.yml:/etc/docker/registry/config.yml docker.io/registry
5 测试拉取镜像
docker pull centos:latest
5 将镜像打标签(不然无法push到指定仓库)
docker tag docker.io/centos:latest 192.168.25:132:5000/my_centos:1.0
6 推到私有仓库
docker push 192.168.25:132:5000/my_centos:1.0
7 删除仓库镜像测试
7.1 在registry中搜索镜像列表
curl -X GET http://192.168.25.132:5000/v2/_catalog
7.2 查看当前镜像的tag
curl http://192.168.25.132:5000/v2/my_centos/tags/list
7.3 获取sha256
curl --header “Accept:application/vnd.docker.distribution.manifest.v2+json” -I -XGET http://镜像地址/v2/镜像名称/manifests/镜像版本
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET http://192.168.25.132:5000/v2/my_centos/manifests/1.0
8 根据sha256删除仓库里面的镜像(只删除索引,实际内容没有删除)
curl -I -XDELETE <镜像仓库>/v2/<镜像名>/manifests/
curl -I -XDELETE 192.168.25.132:5000/v2/my_centos/manifests/sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a
9 进入镜像仓库所在容器,查看仓库大小,会发现大小没有变化(只删除了元镜像)
du -chs /var/lib/registry/
10 垃圾回收
registry garbage-collect /etc/docker/registry/config.yml