环境:

Ubuntu 16.04.3

仓库IP:192.168.233.127

客户端IP:192.168.233.123


1、安装docker

apt-get install -y docker.io

systemctl enable docker

2、在仓库上配置:

docker pull registry:2             拉取仓库容器

docker run -d -p 5000:5000 --restart=always -v /data/registry:/var/lib/registry --name  docker-registry2 registry

其中/data/registry为物理机路径,/var/lib/registry为容器里面的路径

3、在客户端配置:

这时候可先尝试提交镜像:

docker push 192.168.233.127:5000/redis-nod2


wKiom1nkEmDBRCn1AAA43qvqwvA132.png


因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改客户端docker启动配置文件 /etc/default/docker,在其中增加 DOCKER_OPTS="--insecure-registry=192.168.233.127:5000 "如下所示:

wKioL1nkEErzsvpqAAAvIsi0Tc8649.png

然后重启服务:systemctl restart docker.service

从图可知配置已生效:

spacer.gifwKiom1nkEmHCpwWJAADH5PWo4R8569.png

4、提交镜像

可以在客户端随便找个镜像(如果没有可以拉redis),然后修改tag

docker tag redis 192.168.233.127:5000/redis-node

docker push 192.168.233.127:5000/redis-node

看到上传成功即可。

5、查看

方法一:curl -XGET http://192.168.233.127:5000/v2/_catalog 可查看

方法二:可在仓库宿主机上查看/data/registriy里查看以redis-node为名的目录

方法三:curl -XGET http://192.168.233.127:5000/v2/busybox-123/tags/list  其中busybox-123为镜像名

6、删除

docker私有仓库v2版本中的镜像,官方不建议删除,但是也提供了删除接口:

DELETE /v2/<name>/manifests/<reference> Host: <registry host> Authorization: <scheme> <token>

删除的原理就是把索引删掉,但磁盘上的数据是删不掉的。这是由于各个镜像之间的不同层共用的关系,可能导致删除一个镜像后其余的镜像也无法使用了。