概述
本文將介紹如何通過Docker+Shiny-Server技術(shù)極速打造Web開發(fā),并通過實(shí)戰(zhàn)案例進(jìn)行演示垃瞧。
為什么使用Shiny
Shiny是R中的一種Web開發(fā)框架,使得R的使用者不必太了解css蒿赢、js只需要了解一些html的知識(shí)就可以快速完成web開發(fā)奢方,且shiny包集成了bootstrap搔扁、jquery、ajax等特性蟋字,極大解放了作為統(tǒng)計(jì)語言的R的生產(chǎn)力阁谆。使得非傳統(tǒng)程序員的R使用者不必依賴于前端、后端工程師就可以自己依照業(yè)務(wù)完成一些簡單的數(shù)據(jù)可視化工作愉老,快速驗(yàn)證想法的可靠性场绿。
為什么使用Docker
如果說2年以前,你們沒有學(xué)習(xí)Git嫉入、GitHub你就落伍了⊙娴粒現(xiàn)在,流行的方向則是Docker咒林!Docker是一種類似于虛擬機(jī)的技術(shù)熬拒,主要解決快速部署的問題,在Docker中安裝的軟件和主機(jī)中的軟件可以完全隔離垫竞,并通過Daocloud或者h(yuǎn)ub.docker.com等云服務(wù)快速建立Docker倉庫澎粟,快速復(fù)用Docker鏡像。Docker已經(jīng)不僅僅是DevOps人員手中的神器了欢瞪,每一個(gè)開發(fā)者都應(yīng)該學(xué)會(huì)如何使用Docker活烙。
由于Docker的標(biāo)準(zhǔn)交付特性使得 shiny 應(yīng)用在運(yùn)維、部署遣鼓、交付時(shí)都是標(biāo)準(zhǔn)化的啸盏,在大規(guī)模團(tuán)隊(duì)協(xié)作時(shí)體現(xiàn)出了很大的價(jià)值,開發(fā)和運(yùn)維人員不必再為環(huán)境配置擔(dān)心骑祟,提高了開發(fā)效率回懦。而對于個(gè)人開發(fā)者气笙,參加黑客馬拉松或者快速原型開發(fā),Docker也是不二之選怯晕,利用Docker線程級(jí)別的快速復(fù)用機(jī)制也使得一個(gè)上G的環(huán)境配置可以在很短的時(shí)間內(nèi)快速完成潜圃。
Docker的弊端在于對于個(gè)人開發(fā)者而言,想要構(gòu)建一個(gè)標(biāo)準(zhǔn)的Docker鏡像并提交到Docker Hub或自建的Docker Registery上需要按規(guī)定寫DockerFile舟茶, 有時(shí)候這反而會(huì)增加項(xiàng)目的復(fù)雜度秉犹。
準(zhǔn)備
- VPS或任意一臺(tái) 類Unix服務(wù)器,本文選用了AWS的Ubuntu服務(wù)器作為示例稚晚。實(shí)際使用中Windows或者M(jìn)ac電腦下載DockerToolBox軟件安裝docker后也可以使用崇堵。
部署
步驟一:安裝Docker
首先,ssh進(jìn)入linux主機(jī)客燕。本文以AWS上的ubuntu14.04的新主機(jī)為例鸳劳。
ssh -i harryzhu.pem ubuntu@52.88.172.224
其次,安裝Docker相關(guān)的組件
sudo apt-get update
wget -qO- https://get.docker.com/ | sh
步驟二:安裝Shiny-Server
安裝完畢也搓,從hub.docker.com拉去最新的shiny-server鏡像
docker run -d -p 3838:3838 quantumobject/docker-shiny
上面的中
docker run
表示根據(jù)quantumobject/docker-shiny
鏡像啟動(dòng)一個(gè)新的容器赏廓。-d
表示以demon形式運(yùn)行,掛在后臺(tái)運(yùn)行傍妒。-p 3838:3838
表示將主機(jī)的3838端口和docker集群中的3838做端口映射此外
docker run
在找不到鏡像時(shí)會(huì)先從docker hub中自動(dòng)下載幔摸,下載完后自動(dòng)再啟動(dòng)容器。
訪問http://52.88.172.224:3838/
從登陸到部署颤练,5行代碼搞定既忆!
結(jié)束語
如果想要加入更多Shiny的Web應(yīng)用可以從GitHub上找到大量的Shiny實(shí)例,然后根據(jù)你的需求稍微改造即可嗦玖!
示例一:數(shù)據(jù)可視化
下面舉一個(gè)例子患雇,通過訪問Rstudio的官方shiny實(shí)例可以看到實(shí)例的目錄,在本地的R中執(zhí)行
if (!require(shiny))
install.packages("shiny")
shiny::runGitHub("rstudio/shiny-examples", subdir="063-superzip-example")
你也可以訪問該網(wǎng)址http://shiny.rstudio.com/gallery/superzip-example.html
看到在線的例子宇挫。
示例二:表單收集
你將可以看到這一實(shí)例苛吱,通過修改subdir參數(shù)可以查看其他實(shí)例。
比如
shiny::runGitHub("rstudio/shiny-examples", subdir="066-upload-file")
現(xiàn)在器瘪,回到ubuntu主機(jī)上翠储,進(jìn)入剛才生成的docker容器中
docker exec -it docker-shiny /bin/bash
根據(jù)參考文獻(xiàn)2
進(jìn)入網(wǎng)站顯示的文檔的根目錄,下載rstudio的shiny-server實(shí)例
cd /srv/shiny-server
wget https://github.com/rstudio/shiny-examples/archive/master.zip
unzip master.zip
現(xiàn)在重新訪問 http://52.88.172.224:3838/shiny-examples-master/
你便可以任意選擇一個(gè)實(shí)例進(jìn)行復(fù)用了。
實(shí)戰(zhàn)案例:
在Segmentfault 2015 北京站的黑客馬拉松上橡疼,由幾名之前搞生物援所、基因的R語言使用者組成的基飯團(tuán)隊(duì)(15組),基于shiny完成了一次漂亮的逆襲衰齐,最終獲得了大賽的優(yōu)勝獎(jiǎng)一枚任斋。
作為分享主義者(sharism),本人所有互聯(lián)網(wǎng)發(fā)布的圖文均遵從CC版權(quán)耻涛,轉(zhuǎn)載請保留作者信息并注明作者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog/harryprince废酷,如果涉及源代碼請注明GitHub地址:https://github.com/harryprince。微信號(hào): harryzhustudio
商業(yè)使用請聯(lián)系作者抹缕。