基於Docker的工具/服務即插即用

基於Docker的工具/服務即插即用

來自專欄智能移動開發方法8 人贊了文章

廢話不多說,先上動圖,假設要在開發機上啟動mitmproxy這個代理工具

Appetizer 1.3.14 新功能,工具即插即用,一鍵起停,首發支持Jenkins, Influxdb, Gitlab, Grafana, ATXServer, mitmproxy, Hitchhiker, STF,持續開放增加中。。。

解決了什麼問題

每當要用個新工具,前幾個小時花在

python 2.7不行,要3.6jdk 6不行要8sudo pip install 等啊等,SSL一會又出錯了go build 等npm install 還是cnpm install...

這些從源代碼開搞的安裝成年舊事早就應該淘汰了,處處用sudo,處處全局安裝,離系統重裝不遠。Docker早就來解決這些問題了,工具自己需要Python/JDK/Node/Go的版本自己聲明,build過程寫入Dockerfile,build成鏡像,安裝工具是直接抓取鏡像直接跑就好。是時候想到裝工具首選用Docker,於是我們Appetizer就把這一溜常用的工具的docker安裝全都擼了一遍,寫成了統一的部署腳本,然後就,一鍵安裝起停咯。當然是支持三平台的,只要裝好Docker,其他事情交給我們(Windows, mac有Docker Desktop全家福, linux直接包管理裝)。Use case:

  • 我聽說一個新工具,想試用看看
    • 用 Appetizer 一鍵就好
  • 我要用XXX 抓包/存數據/可視化數據/xxx
    • 用 Appetizer 一鍵就好,用完關閉,不擔心daemon常駐耗內存
  • 我要在伺服器上裝這些工具,全網用
    • 伺服器上裝好Docker 運行 Appetizer 一鍵即可,沒差別
  • 我有個本地的工具想遷移到伺服器上
    • Appetizer 創建工具的容器時,工具運行時產生的數據是mount到存儲卷的(比如log, 數據等),具體用到哪些存儲卷可以通過每個工具的詳細信息了解。在伺服器上用Appetizer同樣安裝這個工具,然後把存儲卷數據從本地rsync到伺服器對應的存儲卷即可
  • 我是docker高級玩家
    • docker compose配置在,隨便玩,透明的
  • 我是k8s高級玩家,我手下有xxx個容器,xxx個負載均衡實例,xxx個dashboard
    • 那你自己玩

原理

原理很簡單,Docker裝好之後,有非常完整的API:

Docker Engine API v1.37 Reference?

docs.docker.com

docker命令行工具其實是API的封裝,而 Appetizer 是直接調用API管理Docker的。

在管理每個具體工具的時候,我們擼了一遍每個工具的docker安裝文檔,絕大多數都是建議用 docker run xxx 命令行工具來部署的。我們統一採用的docker compose配置文件格式。科普一下docker compose是一個(官方)工具,讀取yml格式的配置文件,可以自動管理一個工具需要的多個docker 容器(比如工具依賴mysql容器等等)。用compose格式的另一個好處是可以全面地管理工具運行中產生的數據(存儲卷)。Appetizer可以讀取標準的docker compose yml配置文件並執行它,兼容官方的docker-compose工具。每個Appetizer支持的工具的詳細信息里都有會抓取的鏡像,容器名字,埠映射以及存儲卷(volume) 例如:

  • Appetizer的每個工具的docker compose yml配置,可以單獨拿出來,用官方的docker-compose來用

開放協作

所有的目前的(以及未來的)工具的metadata和compose配置都在這裡:

appetizerio/OpenServices?

github.com圖標

歡迎PR增加新工具/服務

  • 我想用一個新工具,有Docker安裝方式,Appetizer沒有收錄
    • 點擊 「貢獻新的服務」,填寫metadata (工具名稱,logo,官網等等信息),重要的是寫好它的compose文件(需要docker知識),提交後我們馬上會處理、測試,最快下次發版
  • 我想用一個新工具,沒有Docker安裝方式
    • 可以先提交metadata,docker處留空,積極推進Docker化
  • 我做了一個新工具,希望Appetizer收錄
    • 首先,學習docker並docker化你的工具,然後「貢獻新的服務」
  • 為什麼沒有Appium?Appium不是也有Docker部署么?
    • Appium比較特別,需要訪問USB設備,在linux下就是要訪問 /dev/usb 是個特權操作,所以Appium在Linux上用Docker部署需要創建特權容器;Appium在非Linux上Docker安裝,也是因為這個特權原因,需要搞一個docker machine,相當於一個虛擬機,暫時不在目前Appetizer支持的框架內
  • 為什麼STF還不支持Docker部署?
    • STF的情況和Appium類似,而且STF的Docker部署非常混亂,努力中

AppetizerIO QQ群:467889502

  • 文檔

Appetizer文檔 | Appetizer?

doc.appetizer.io圖標
推薦閱讀:

最小許可權的容器編排
如何打造一個更好的 Kubernetes 發行版
安裝並使用docker@Windows——第二章(使用docker)
Docker遠程下載、IHM硬碟監測,厲害了我的鐵威馬NAS
使用Flannel搭建跨主機互聯的容器網路

TAG:移動開發 | Docker | 部署 |