前言
由于目前大多数的镜像下载网站都是在国外站点,国内用户在下镜像的时候就时常遇到下载速度超慢的情况;而且在将Docker应用到生产环境的过程中,还会面临下载过来的Docker镜像是否安全的问题。因些在生产环境下搭建私有的Docker Registry,就是一个一举二得的方案了。
但目前国内的大多数企业使用的发行版,为Redhat体系,其中又以Centos环境居多。而网上的资料和出版的书籍在介绍Docker的时候都是以ubuntu为基础进行讲解和配置,而CentOS6.x以上版本访问私有的 Docker
Registry 都需要SSL的支持。因此使用CentOS来搭建此服务最大的难点是配置和使用SSL,并让做为反向代理的nginx支持SSL传输和认证。
约定
- 服务器IP:172.20.31.201
- 服务器域名:registry.cmzsteven.com
#https的SSL证书生成时不能用IP地址因此这里随意设置一个域名即可,不一定为真实域名。- 客户端IP:172.20.31.200
- 代理服务器:nignx (反向代理)
一、配置流程
为方便大家从总体上掌握服务搭建,在这里简单叙述一下配置流程:
- 在配置端配置SSL:生成密钥、根证书,为nginx服务生成SSL密钥,最后私有CA根据请求完成对nginx证书的签发;
- 编译、安装nginx,并配置为反向代理。监听https的433,对客户端发出的针对433端口的请求转发到registry服务的5000端口;
- 安装Docker的registry镜像并运行容器,监听来自nginx转发过来的请求;
- 在客户端完成SSL证书的添加,并完成上传及下载镜像的操作,完成测试。
二、在Registry服务器上配置SSL
1、安装相关依赖包
yum install -y gcc pcre-devel pcre-static openssl openssl-devel httpd-tools
注:
- gcc 是编译器;
- pcre-devel pcre-static 是编译nginx时需要的依赖包;
- openssl openssl-devel 用于生成SSL根证书及密钥并进行nignx证书的签发;
- httpd-tools 用来生成登录https服务的帐号及密码。
2、添加域名到本地/etc/hosts
echo "172.20.31.201 registry.cmzsteven.com" >> /etc/hosts
3、生成根密钥
cd /etc/pki/CA
rm -rf cacert.pem index.txt index.txt.attr index.txt.old serial serial.old
openssl genrsa -out private/cakey.pem 2048
运行结果:
Generating RSA private key, 2048 bit long modulus
...................................................+++
....................................................................................+++
e is 65537 (0x10001)
4、生成根证书
cd /etc/pki/CA
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
运行结果:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:liaoning
Locality Name (eg, city) [Default City]:shenyang
Organization Name (eg, company) [Default Company Ltd]:cmzstevenstudio
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:registry.cmzsteven.com
Email Address []:
在运行过程中会提示一些信息用于生成私有的CA根证书。需要特别注意的是倒数第二行“Common Name”,这里需要输入的是事先准备好的服务器域名
生成的证书存放的位置:/etc/pki/CA/cacert.pem
5、为Nginx生成SSL密钥
mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
openssl genrsa -out nginx.key 2048
运行结果:
Generating RSA private key, 2048 bit long modulus
...............................................................+++
......................................+++
e is 65537 (0x10001)
*CA中心服务与要申请证书的Nginx服务应该运行在同一台服务器上,否则应该是在需要运行Nginx服务的服务器上生成证书。
6、为Nginx生成证书签署请求
openssl req -new -key nginx.key -out nginx.csr
运行结果:
Generating RSA private key, 2048 bit long modulus
...............