[原]打造數據產品的快速原型:Shiny的Docker之旅
微信號: harryzhustudio 商業使用請聯繫作者。
概述
本文將介紹如何通過Docker+Shiny-Server技術極速打造Web開發,並通過實戰案例進行演示。
為什麼使用Shiny
Shiny是R中的一種Web開發框架,使得R的使用者不必太了解css、js只需要了解一些html的知識就可以快速完成web開發,且shiny包集成了bootstrap、jquery、ajax等特性,極大解放了作為統計語言的R的生產力。使得非傳統程序員的R使用者不必依賴於前端、後端工程師就可以自己依照業務完成一些簡單的數據可視化工作,快速驗證想法的可靠性。
為什麼使用Docker
如果說2年以前,你們沒有學習Git、GitHub你就落伍了。現在,流行的方向則是Docker!Docker是一種類似於虛擬機的技術,主要解決快速部署的問題,在Docker中安裝的軟體和主機中的軟體可以完全隔離,並通過Daocloud或者http://hub.docker.com等雲服務快速建立Docker倉庫,快速復用Docker鏡像。Docker已經不僅僅是DevOps人員手中的神器了,每一個開發者都應該學會如何使用Docker。
由於Docker的標準交付特性使得 shiny 應用在運維、部署、交付時都是標準化的,在大規模團隊協作時體現出了很大的價值,開發和運維人員不必再為環境配置擔心,提高了開發效率。而對於個人開發者,參加黑客馬拉松或者快速原型開發,Docker也是不二之選,利用Docker線程級別的快速復用機制也使得一個上G的環境配置可以在很短的時間內快速完成。
Docker的弊端在於對於個人開發者而言,想要構建一個標準的Docker鏡像並提交到Docker Hub或自建的Docker Registery上需要按規定寫DockerFile, 有時候這反而會增加項目的複雜度。
準備
VPS或任意一台 類Unix伺服器,本文選用了AWS的Ubuntu伺服器作為示例。實際使用中Windows或者Mac電腦下載DockerToolBox軟體安裝docker後也可以使用。
部署
步驟一:安裝Docker
首先,ssh進入linux主機。本文以AWS上的ubuntu14.04的新主機為例。
參考文獻1ssh -i harryzhu.pem ubuntu@52.88.172.224n
其次,安裝Docker相關的組件
sudo apt-get updatenwget -qO- https://get.docker.com/ | shn
步驟二:安裝Shiny-Server
安裝完畢,從http://hub.docker.com拉去最新的shiny-server鏡像
docker run -d -p 3838:3838 quantumobject/docker-shinyn
上面的中 docker run表示根據quantumobject/docker-shiny鏡像啟動一個新的容器。
-d表示以demon形式運行,掛在後台運行。
-p 3838:3838表示將主機的3838埠和docker集群中的3838做埠映射
此外docker run在找不到鏡像時會先從docker hub中自動下載,下載完後自動再啟動容器。
訪問http://52.88.172.224:3838/
從登陸到部署,5行代碼搞定!
結束語
如果想要加入更多Shiny的Web應用可以從GitHub上找到大量的Shiny實例,然後根據你的需求稍微改造即可!
示例一:數據可視化
下面舉一個例子,通過訪問Rstudio的官方shiny實例可以看到實例的目錄,在本地的R中執行
if (!require(shiny))n install.packages("shiny")nshiny::runGitHub("rstudio/shiny-examples", subdir="063-superzip-example")n
示例二:表單收集
你將可以看到這一實例,通過修改subdir參數可以查看其他實例。
比如shiny::runGitHub("rstudio/shiny-examples", subdir="066-upload-file")n
docker exec -it docker-shiny /bin/bashn
根據參考文獻2
進入網站顯示的文檔的根目錄,下載rstudio的shiny-server實例
cd /srv/shiny-servernwget https://github.com/rstudio/shiny-examples/archive/master.zipnunzip master.zipn
現在重新訪問 http://52.88.172.224:3838/shiny-examples-master/ 你便可以任意選擇一個實例進行復用了。
實戰案例:
在Segmentfault 2015 北京站的黑客馬拉松上,由幾名之前搞生物、基因的R語言使用者組成的基飯糰隊(15組),基於shiny完成了一次漂亮的逆襲,最終獲得了大賽的優勝獎一枚。
大賽報道傳送門
項目源代碼
Docker中文教程
參考資料
Shiny https: Securing Shiny Open Source with SSL
Password protect Shiny Apps
Shiny Database App (CRUD)
Shiny
Web Application Development with R and Apache
Persistent data storage in Shiny apps
Share data across sessions with shinyapps.io
Building Interactive Web Apps with Shiny
作為分享主義者(sharism),本人所有互聯網發布的圖文均遵從CC版權,轉載請保留作者信息並註明作者 Harry Zhu 的 FinanceR專欄:FinanceR - SegmentFault,如果涉及源代碼請註明GitHub地址:harryprince (HarryZhu) · GitHub。微信號: harryzhustudio
商業使用請聯繫作者。
推薦閱讀:
※當古代文人參加「中國好詩人」節目 | R爬蟲&可視化第2季
※入門 ggplot2 的圖形語法
※第二篇——用幾分鐘了解R語言入門知識(續)
※第二講實踐:數據結構入門
※2017.07大數據入門學習計劃