bara-基于Nginx和Dokcer的单机灰度测试环境原型

jopen 8年前

什么是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.rbconfig/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/