bara-基于Nginx和Dokcer的单机灰度测试环境原型
什么是bara
bara,即日语的バラ,也就是玫瑰。
bara是一个基于Nignx和Docker的多版本程序同时在线的简易测试环境,只能单机使用,并且只是一个PoC而已,仅供参考。
简单来说,就是使用Nginx做反向代理,代理到后面的Docker容器,bara能动态创建Nignx配置文件,重启Nginx;而浏览器可以通过设置特殊header(默认为一个字母v)来通过Nginx代理,访问指定的后面的Docker容器。
bara概览
bara架构很简单,一个Nginx服务器运行在host上,画图如下:
其背后用到的主要原理就是Nginx的proxy_pass以及map功能,Nginx会根据浏览器设置的自定义header(v)的值,根据map的映射关系,找到合适的upstream代理过去而已。
而bara,就是发挥了Nginx的强大功能,和Docker的灵活轻便,从而能在一台主机上,跑n个版本的应用程序,以方便测试。
bara还有一个概念就是Nginx的配置文件模板,Nginx的配置文件是根据这个模板动态创建的,这个模板如果有{{upstream}}占位符,则会被bara系统自动根据运行中的容器来替换为一个upstream列表。
bara的代码在: https://github.com/liubin/bara。
下面,我们就来看看如何使用。
开始使用
启动前的配置
首先,需要修改config/initializers/docker.rb和 config/initializers/nginx.rb 这两个配置文件,指定如何连接Docker daemon和Nginx的配置文件位置以及nginx可执行程序的位置。
创建Nignx配置文件模板
Nginx配置文件模板是动态创建Nginx配置文件的模板,可以根据情况,准备多个模板。在Nginx服务页面,创建Nginx配置文件的时候,会基于状态为active的模板来创建Nginx的配置文件。
Nginx配置文件模板列表页面:
编辑模板页面:
拉取镜像到该host
bara还提供了简单的镜像管理功能:列表,拉取,删除。如果镜像太大,尽量避免在线操作,还是直接在console中使用docker pull来拉取。
这是镜像列表页面:
启动容器
容器列表页面:
启动容器页面:
目前比较简单,只有一个容器名和CMD参数可以填写,默认会以-d和-P的形式启动容器。
生成Nginx配置文件和重启Nginx服务
在Nignx服务页面,可以完成查看当前Nginx配置文件内容,在线修改,以及重启Nginx服务器等。
这是一个Nignx配置文件例子:
设置客户端header
这里我使用了Chrome的插件ModHeader,这个插件,可以根据指定的url规则,设置自定一个header,这里我们添加了v这个header。ModHeader设置页面如下:
如果没有设置header,则Nginx会使用map中default的值作为upstream,目前为取得容器列表后的最后一个容器。
限制
目前bara只是一个原型,有很多不足,可能有人会觉得它
- 单机
- 使用-P
- 不能挂载Volume
等等,有兴趣的可以自己修改吧,代码在 https://github.com/liubin/bara 。
来自:http://liubin.org/2015/12/08/bara-nginx-and-dokcer-based-test-env-poc/