本記事は、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を候補の一つにしてみてください。