bara-基于Nginx和Dokcer的單機灰度測試環境原型

jopen 9年前發布 | 34K 次閱讀 Nginx 單元測試

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!