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/