环境:
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
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改客户端docker启动配置文件 /etc/default/docker,在其中增加 DOCKER_OPTS="--insecure-registry=192.168.233.127:5000 "如下所示:
然后重启服务:systemctl restart docker.service
从图可知配置已生效:
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>
删除的原理就是把索引删掉,但磁盘上的数据是删不掉的。这是由于各个镜像之间的不同层共用的关系,可能导致删除一个镜像后其余的镜像也无法使用了。