您的位置:首页 > 运维架构 > Docker

docker 私有 registry 透过 nginx 反向代理

2016-05-18 15:30 381 查看
Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

一、安装 docker ,并且添加可信 registry,重启 docker 服务,准备镜像。

vim /usr/lib/systemd/system/docker.service





二、运行 registry



三、配置 nginx-proxy

1、安装依赖包及 nginx

yum -y install wget httpd
yum -y install pcre pcre-devel
yum -y install openssl openssl-devel

wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz tar zxf tengine-2.1.2.tar.gz
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install


2、配置 nginx

# upstream定义registry地址
upstream docker-registry {
server 10.1.0.50:5000;
}

# server 定义域名及location
server {
listen  443;
server_name docker.showjoy.net;

# 设置nginx允许的POST请求数据包大小用:client_max_body_size参数(默认是1m)
client_max_body_size 300m;

# 开启ssl及定义ssl证书位置
ssl on;
ssl_certificate /etc/ssl/certs/docker.showjoy.net.crt;
ssl_certificate_key /etc/ssl/certs/docker.showjoy.net.key;

# 请求转发的的必要请求头信息(虚拟主机地址,远程主机地址,访问token,服务器ip和端口)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization "";
proxy_set_header Accept-Encoding "";
proxy_set_header X-Forwarded-By $server_addr:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;

# 第一个location用于访问docker-registry,需要进行认证
location / {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/auth/htpasswd.txt;
proxy_pass http://docker-registry; }

# 第二个location用于访问docker-registry的images,关闭认证
location /v1/search {
auth_basic off;
proxy_pass http://docker-registry; }

# 第三个location只是用于测试,关闭认证
location /1 {
auth_basic off;
root /tmp/;
autoindex on;
}

}


四、生成 nginx 服务器 ssl 密钥

1、生成私钥文件

cd /etc/ssl/certs/

openssl genrsa -out docker.showjoy.net.key 2048

2、生成根证书文件

openssl req -newkey rsa:2048 -nodes -keyout docker.showjoy.net.key -x509 -days 3650 -out docker.showjoy.net.pem -subj “/C=CN/ST=state/L=city/O=xxx/OU=docker.showjoy.net/”

3、下面将pem编码格式的证书转换成crt扩展名证书,放到系统证书目录(用户访问registry之前需要这一步)

cat docker.showjoy.net.pem | tee -a /etc/ssl/certs/docker.showjoy.net.crt

五、 htpasswd 工具生成用户账户(用户名:hongxue)

mkdir -p /usr/local/nginx/auth

cd /usr/local/nginx/auth

htpasswd -c htpasswd.txt hongxue

六、其他

1、关闭 firewalld 防火墙

2、关闭 selinux

3、添加 /etc/hosts 映射(因为nginx部署在本地,没有域名可用)

4、设置 docker 开启自启动(systemctl enable docker.service)



5、启动 nginx



七、上传镜像

看到下面报错,是因为我没有通过nginx认证



当我第二次 login 之后,再一次 docker push docker.showjoy.net/nginx ,则成功!



可以看到,我已经在 registry 中上传了两个 images

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: