[原]打造數據產品的快速原型: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或者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的新主機為例。

參考文獻1

ssh -i harryzhu.pem ubuntu@52.88.172.224n

其次,安裝Docker相關的組件

sudo apt-get updatenwget -qO- https://get.docker.com/ | shn

步驟二:安裝Shiny-Server

安裝完畢,從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中自動下載,下載完後自動再啟動容器。

訪問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

你也可以訪問該網址shiny.rstudio.com//supe看到在線的例子。

示例二:表單收集

你將可以看到這一實例,通過修改subdir參數可以查看其他實例。

比如

shiny::runGitHub("rstudio/shiny-examples", subdir="066-upload-file")n

現在,回到ubuntu主機上,進入剛才生成的docker容器中

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

現在重新訪問 52.88.172.224:3838/shin 你便可以任意選擇一個實例進行復用了。

實戰案例:

在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大數據入門學習計劃

TAG:shiny | Docker | R编程语言 |