一、前提条件
(1)关闭selinux
(2)开启路由转发
改写完成之后 sysctl -p 刷新一下
正式开始
1、安装依赖软件包
在Nginx编译需要PCRE,因为Nginx的Rewrite模块和HTTP核心模块会使用到 PCRE 正则表达式。需要安装pcre 和pcre-devel用yum就能安装。
Zlib库提供了开发人员的压缩算法,在 nginx的模块中需要使用 gzip压缩。 需要安装zlib和zlib-devel用yum就可以安装在 Nginx 中如果需要为服务器提供安全则需要用到 OpenSSL 库。
需要安装的是 openssl 和 openssl-devel。用 yum 就可以安装。
配置SSL
(1) 编辑/etc/hosts,把 docker.benet.com的 ip地址添加进来,例如:
主机名、ip地址:
更改主机名
更改hosts文件
生成根证书
会提示输入一些内容,因为是私有的,所以可以随便输入,最好记住能与后面保持一致,特别是"Common Name”。必须要和hostname 显示的一致
上面的自签证书cacert.pem应该生成在/etc/pki/CA下
为 nginx web服务器生成 ssl密钥
注: 因为 CA 中心与要申请证书的 nginx服务器是同一个所以就在本机上执行为nginx服务器生成ssl密钥了,否则应该是在另一台需要用到证书的服务器上生成。
查看nginx服务器的密钥
为 nginx生成证书签署请求
同样会提示输入一些内容, Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password 不填。
私有CA 根据请求来签发证书
同样会提示输入一些内容,选择 y就可以了!
查看nginx的证书
安装,配置,运行 nginx
添加组和用户
下载nginx源文件:
编译,安装nginx:
上述选项的解释:
--user=USER 设定程序运行的用户环境(www)
--group=GROUP 设定程序运行的组环境(www)
--prefix=PATH 设定安装目录
--with-pcre启用pcre库,Nginx的Rewrite模块和 HTTP核心模块会使用到 PCRE正则表达式
--with-http_stub_status_module是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态
--with-http_ssl_module 开启 SSL 模块,支持使用 HTTPS协议的网页
--with-http_realip_module 开启Real IP的支持,该模块用于从客户请求的头数据中读取Real Ip地址
--with-http_addition_module 开启 Addtion 模块,该模块允许你追加或前置数据到相应的主体部分
--with-http_flv_module模块ngx_http_flv_module 为Flash Video(FLV)文件提供服务端伪流媒体支持
编辑/usr/local/nginx/conf/nginx.conf 文件
相关选项含义:
ssl_session_cache会话缓存用于保存 SSL 会话,这些缓存在工作进程间共享,可以使用
ssl_session_cache指令进行配置。1M缓存可以存放大约 4000个会话。
ssl_session_timeout缓存超时,默认的缓存超时是5分钟。
ssl_ciphers HIGH:!aNULL:!MD5使用高强度的加密算法
ssl_prefer_server_ciphers on 依赖 SSLv3 和 TLSv1 协议的服务器密码将优先于客户端密码。
即:在 SSLv3 或这是TLSv1握手时选择一个密码,通常是使用客户端的偏好。如果这个指令是启用的,那么服务器反而是使用服务器的偏好。
client_max_body_size即允许上传文件大小的最大值
proxy_set_headerHost $host 和proxy_set_header X-Forward-For $remote_addr 的作用描述:
nginx 为了实现反向代理的需求而增加了一个 ngx_http_proxy_module 模块。其中proxy_set_header 指令就是该模块需要读取的配置文件。在这里,所有设置的值的含义和 http
请求同中的含义完全相同,除了 Host外还有X-Forward-For。
Host的含义是表明请求的主机名,因为 nginx作为反向代理使用,而如果后端真实的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的 nginx不重写请求头中的host字段,将会导致请求失败【默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的 host 字段应为 proxy_pass 指令设置的服务器】。
同理,X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。因此,在配置用作反向代理的 nginx中一般会增加两条配置,修改 http的请求头:
proxy_set_headerHost $host;
proxy_set_headerX-Forward-For $remote_addr;
这里的$host和$remote_addr 都是nginx的导出变量,可以再配置文件中直接使用。
验证配置
启动nginx:
验证nginx是否启动:
配置,运行Docker
停止docker
编辑/etc/sysconfig/docker 文件,加上如下一行
DOCKER_OPTS="--insecure-registrydocker.benet.com --tlsverify --tlscacert /etc/pki/CA/cacert.pem"
把根证书复制到/etc/docker/certs.d/docker.yy.com/目录下
mkdir -p/etc/docker/certs.d/docker.benet.com
cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/docker.benet.com/ca-certificates.crt
启动docker
上传registry 镜像 rz
再载入
例如将目录/opt/data/registry 作为私有仓库的位置
运行私有仓库容器
有时候启动不起来 自己手动一下
可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如上面的例子将上传的镜像放到/opt/data/registry 目录。
-p(小写的)用于将容器的 5000端口映射宿主机的 5000端口。
验证registry:
用浏览器输入: https://docker.benet.com
或者:curl -i -k https://docker.benet.com
curl 是通过 url 语法在命令行下上传或下载文件的工具软件,它支持 http,https,ftp,ftps,telnet 等多种协议,常被用来抓取网页和监控 Web 服务器状态
服务端的配置就到此完成!
注意:注意防火墙
Docker客户端配置
编辑/etc/hosts,把 docker.benet.com的 ip地址添加进来,例如:
把 docker registry服务器端的根证书追加到 ca-certificates.crt文件里
先从docker registry服务器端把文件/etc/pki/CA/cacert.pem 拷贝到本机,然后执行命令:
cat ./cacert.pem>>/etc/pki/tls/certs/ca-certificates.crt
验证docker.yy.com下的registry:
用浏览器输入: https://docker.benet.com
或者:curl -i -k https://docker.benet.com
使用私有registry 步骤:
登录: docker login -u testuser -p pwd123 -e"test@benet.com" https://docker.benet.com
上传个镜像测试 给打上标
docker pushdocker.benet.com/centos:centos6
发布:上传镜像到本地私有仓库
docker pushdocker.benet.com/centos:centos6
查看私有仓库是否有对应的镜像
# curl192.168.0.167:5000/v1/search
查看镜像的存储目录和文件(在镜像服务器
/opt/data/registry/repositories
从私有仓库pull下来 image,查看image
查看私有仓库是否有对应的镜像
或浏览器访问仓库
(1) 弊端:
server 端可以 login 到官方的 Docker Hub,可以 pull,push 官方和私有仓库!
client 端只能操作搭设好的私有仓库!
私有仓库不能 search!
(2) 优点:
所有的 build,pull,push 操作只能在私有仓库的 server 端操作,降低企业风险!
(3) 当 client端 docker login 到官方的https://index.docker.io/v1/网站,出现x509: certificate signed by unknown authority 错误时
重命名根证书 mv /etc/pki/tls/certs/ca-certificates.crt
/etc/pki/tls/certs/ca-certificates.crt.bak
重启 docker 服务!
servicedocker restart!