2016-04-21 23:28:09
Registry 作为Docker的重要基本组件,无论是在自己的内网搭建,或者是公网私有带宽搭建都是托管私有Image的好方法。
docker pull index.alauda.cn/library/registry:2.3
docker pull index.alauda.cn/library/nginx
docker tag index.alauda.cn/library/registry:2.3 registry:2.3
docker tag index.alauda.cn/library/nginx:latest nginx:latest
docker run -it --rm -v /root/:/data/ nginx cp -rf /etc/nginx /data/ngreg
cat > /root/ngreg/conf.d/reg.conf << EOF
server {
listen 443;
server_name XXX.XXX.XXX;
ssl on;
ssl_certificate /etc/nginx/XXX.XXX.XXX/fullchain1.pem;
ssl_certificate_key /etc/nginx/XXX.XXX.XXX/privkey1.pem;
add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
return 404;
}
proxy_pass http://reg.prod:5000;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
EOF
在上面的脚本重需要修改的是: 1. XXX.XXX.XXX 需要修改成您自己的域名 2. 如果需要申请证书请参考:http://www.philo.top/2016/04/06/letsencryptSSLApply/
配置解释: 1. 默认使用HTTPS协议。 2. header添加指定registry版本。 3. 设置body长度为0无限制长度。 4. 拒绝低于docker1.6版本的访问。 5. 反向代理到docker registry 容器。 6. 其他Headers都是参考文档得到的。
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
上面这两段,放到location下面就可以了。
账号密码文件生成工具
docker network create prod
docker run -it -d --name ngreg --net=prod -v /root/ngreg/:/etc/nginx -p 0.0.0.0:443:443 nginx
docker run -it -d --name reg --net=prod -v /data:/regdata registry:2.3
之后要面临的挑战