Docker私有仓库用户认证代理配置 博客分类: dockerlinux docker
前言
docker官网的registry 可以运行一个开放的docker私有仓库,那个镜像没有做权限控制使用的时候遇到权限问题可以通过配置文件中添加DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=192.168.1.112:5000"
其中192.168.1.112:5000是我仓库用运行的ip和端口。
这样就可以简单的使用docker仓库来管理镜像了,但是这个样子任何人都可以push镜像上来,当然这个是不够安全的,我们的镜像可能被别人的镜像覆盖了,这样我们的工作就白干了,据我所知目前国内有个docker仓库也是这中简单的仓库任何人都可以push 这个仓库的地址是http://dl.dockerpool.com:5000/v1/search 大家有兴趣可以去看看但是不要搞破坏啊。
为了解决权限认证的问题我在DockerHub上找到了marvambass/nginx-registry-proxy镜像通过这个镜像我们可以做仓库的用户认证代理,下面详细介绍下具体做法:
权限认证代理设置步骤
1、获得marvambass/nginx-registry-proxy镜像
pull marvambass/nginx-registry-proxy
2、签发根证书:
2.1、创建根证书存放目录
mkdir /home/$USER/ssl && cd /home/$USER/ssl
2.2、签发根证书
openssl req -x509 -newkey rsa:4086 -keyout key.pem -out cert.pem -days 3650 -nodes
Country Name (2 letter code) [XX]:CH 国家名称
State or Province Name (full name) []:shanxi 省份
Locality Name (eg, city) [Default City]:xian 市区
Organization Name (eg, company) [Default Company Ltd]:hw 公司
Organizational Unit Name (eg, section) []:da 组织
Common Name (eg, your name or your server's hostname) []:test.com 签发域名
Email Address []: 邮件地址可选
3、创建密码文件
3.1、如果htpasswd命令不存在则安装httpd-tools
yum -y install httpd-tools
3.2、创建密码文件添加用户
htpasswd -c docker-registry.htpasswd username
添加用户时 htpasswd 不要加 -c选项
htpasswd docker-registry.htpasswd admin
根证书和密码文件创建完成后ssl目录中应该有以下文件:
/home/$USER/ssl/
cert.pem docker-registry.htpasswd key.pem
4、运行代理容器
docker run -d -p 443:443 \
-v /home/$USER/ssl/:/etc/nginx/external \
--link registry:registry --name nginx-registry-proxy \
marvambass/nginx-registry-proxy
这个的前提是你已经运行了一个regisrty的的仓库,这样用户认证的代理就设置完成了
使用方法
测试时你可以用本机也可以用其他机器或者虚拟机
首先docker私有仓库管理员要将用户通过htpasswd 添加到 docker-registry.htpasswd中
1、安装根证书
Docker私有仓库管理员要将根证书cert.pem 拷贝给用户或者放在某个可以下载的地方让用户下载使用
用户将 cert.pem中的内容追加到
/etc/ssl/certs/ca-bundle.crt
2、重启docker 服务
sudo service docker restart
3、登录仓库
docker login https://test.com:443
我用admin登录成功则输入如下
Username: admin
Password:
Email:
Login Succeeded
4、下载镜像
docker pull test.com/hello-world
5、上传镜像
docker tag hello-world test.com/admin/hello-world
docker pull test.com/admin/hello-world