本記事は、Shiny Advent Calendar 2018の10日目の記事です。
そして、Shiny100本ノックの第33弾です。
今回は、GKE(Google Kubernetes Engine)上でShinyアプリケーションを動かしてみます。
GKE(Google Kubernetes Engine)について
以前こちらの記事で、GKEについて簡単に説明しました。その際は、公開されているDocker イメージを元にShinyアプリケーションを公開してみました。
その続編として、オリジナルのShinyアプリケーションをDockerイメージにしてGCPにアップし、それをGKE上で公開するところまでやってみます。
Shny環境を含むDocker イメージの作り方については、以下で紹介しているので、Dockerに慣れていない方はまずこちらを読んでみてください。
www.randpy.tokyo
Docker イメージを作ってGCPにアップするまで
よくあるヒストグラムを表示するだけの、簡単なアプリケーションをDocker イメージにしてみます。もし試す場合は、お好きなコードでDockerイメージを作ってみてください。ui.R
library(shiny) shinyUI(fluidPage( titlePanel("GCPにアップしたShinyアプリケーション"), sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) ))
server.R
library(shiny) shinyServer(function(input, output) { output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) })
Dockerfile
R環境・Shiny環境、そしてShiny Serverを含み、先ほどのui.Rとserver.Rを実行するためのDockerfileを用意します。なお、以下のようなフォルダ構成を前提にしています。
ー shiny-code/
ー ui.R
ー server.R
ー Dockerfile
Dockerfile**
FROM rocker/shiny RUN apt-get update && apt-get install -y \ libssl-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/ \ && rm -rf /tmp/downloaded_packages/ /tmp/*.rds COPY ./shiny-code/ /srv/shiny-server/shiny/
ビルド
ソースコードとDockerfileができたので、ビルドしましょう。その後、GCPの中の、Container RegistryにPushします。$ docker build . -t asia.gcr.io/xxxxxxxxxxx/simple-shiny:1.0 $ gcloud docker -- push asia.gcr.io/xxxxxxxxxxx/simple-shiny:1.0
なお、xxxxxxxxxxxのところは該当するGCPのプロジェクトIDに、simple-shinyのところはイメージ名、1.0のところはイメージのバージョンを指定してください。
GKEで公開
あとは、こちらの記事にしたがって公開をしてください。www.randpy.tokyo
kubectl run shiny1 --image gcr.io/gcer-public/shiny-googleauthrdemo:latest --port 3838
上のコマンド部分のイメージ名のところを先ほどpushしたものに変更するだけで、その他は一緒のコマンドを打ってもらえれば公開できます。
最後に
一度yamlファイル等を作ってしまえば、Dockerイメージ名を変更するだけで、すぐに公開できます。公開する際の選択肢として、GCPを候補の一つにしてみてください。