CentOS 7下搭建和使用Docker私有仓库

下载registry镜像

docker pull registry

防火墙添加运行5000端口

firewall-cmd –zone=public –add-port=5000/tcp –permanent
firewall-cmd –reload

通过镜像启动一个容器

docker run -d -v /home/nin/registry:/var/lib/registry -p 5000:5000 –restart=always –privileged=true –name registry registry:latest

参数说明:
-v /home/nin/registry:/var/lib/registry :默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器
–privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/var/lib/registry/repositories/library’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误

客户端上传镜像

修改/etc/sysconfig/docker(Ubuntu下配置文件地址为:/etc/init/docker.conf),增加启动选项(已有参数的在后面追加),之后重启docker,不添加报错,https证书问题。

OPTIONS=’–insecure-registry 192.168.0.163:5000′ #CentOS 7系统

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,而此处搭建的私有仓库只提供http服务在docker公共仓库下载一个镜像

docker pull docker.io/centos

来修改一下该镜像的tag
docker tag centos 192.168.0.163:5000/centos

把打了tag的镜像上传到私有仓库
docker push 192.168.0.163:5000/centos

客户端添加私有仓库地址

# 添加这一行
ADD_REGISTRY=’–add-registry 192.168.0.163:5000′

加上后,search镜像,私有仓库和docker hub上都会显示;不加搜索私有仓库,需要命令中指定私有仓库ip

使用仓库中的镜像

查询私有仓库中的所有镜像,使用docker search命令:
curl -u myuser https://registry_ip:5000/v1/search
curl registry_ip:5000/v1/search

docker search registry_ip:5000/ #centos 7
docker search registry_ip:5000/library #centos 6

查询仓库中指定账户下的镜像,则使用如下命令:
docker search registry_ip:5000/account/

使用中遇到的问题

Get https://192.168.0.163:5000/v1/_ping: Tunnel Connection Failed

解决方案:
修改daemon.json文件vim /etc/docker/daemon.json
添加:{ “insecure-registries”:[“192.168.0.163:5000”]}