内容をアップデートしました
はじめに
RStudio Server の Docker イメージを作りました。入っているメインコンテンツは、tidyverse なパッケージ群、MeCab および {RMeCab}パッケージ、LaTeX環境 です。また、ggplot2 などでの日本語プロットも文字化けしないようにIPAexフォントを入れています。
RStudio Server の構築手順
Docker をインストール
OS によって変わってくるので、各自検索してください。自分は Mac で boot2docker を使っています。この環境の場合、こちらなどが参考になります。以下、Docker がインストールされていて docker コマンドが使えることを前提とします。
Docker イメージの取得
利用する Docker イメージ
ymattu/mecab-dという Docker Hub のレポジトリを作成しました。主な特徴は以下です。
rocker/tidyverse
(Docker Hub) をベースrocker/verse
(Docker Hub) のDockerfile の書き方を参考- こちらを参考に日本語で文字化けしないように整備
- こちらの Git Hub レポジトリをもとに自動ビルド
イメージを取得
今回のDocker イメージのタグは latest
しかないので、以下のコマンドでイメージをローカルにもってきます。
Ubuntuなどでは、sudoが必要です。
docker pull ymattu/mecab-d
これで自動的にlatestタグを取得できます。
コンテナの作成
コンテナ作成のためのコマンドの雛形は以下です。
docker run -p 8787:8787 -v (リンクさせたいディレクトリパス):/home/rstudio -d --name (コンテナ名) ymattu/mecab-d:latest
必要に応じてオプションなどは変更してください。例えば、Macのデスクトップとコンテナのホームディレクトリをリンクさせ、コンテナ名を"mattu"にしたいなら、以下のようになります。
docker run -p 8787:8787 -v /Users/ymattu/Desktop:/home/rstudio -d --name mattu ymattu/mecab-d:latest docker start mattu
これでコンテナが作成され、RStudio Serverも起動します。
ブラウザでアクセス
ブラウザを起動し、アドレスバーにlocalhost:8787と入力してください。RStudio Serverへのログイン画面が表示されますので,ユーザー名をrstudio、パスワードをrstudioと入力してください。もしlocalhost:8787でうまくいかない場合、localhostの部分をサーバーのホストのIPアドレスに変えればいけるはずです。IPアドレスの調べるには docker コマンドが使える状態で以下のコマンドを実行します。
ip route | awk 'NR==1 {print $3}'
テスト環境
不具合報告、要望などは
以下のGit Hub レポジトリへIssueを投げる(日本語でOK)か、Twitterの@y__mattu
へお願いします。
Appendix 1. インストールされているパッケージ
> ip <- as.data.frame(installed.packages()[,c(1,3:4)]) > ip <- ip[is.na(ip$Priority),1:2,drop=FALSE] > ip Package Version acepack acepack 1.4.1 assertthat assertthat 0.1 backports backports 1.0.5 base64enc base64enc 0.1-3 BH BH 1.62.0-1 BiocInstaller BiocInstaller 1.24.0 bitops bitops 1.0-6 bookdown bookdown 0.3 brew brew 1.0-6 broom broom 0.4.2 caTools caTools 1.17.1 checkmate checkmate 1.8.2 colorspace colorspace 1.3-2 commonmark commonmark 1.2 covr covr 2.2.2 crayon crayon 1.3.2 curl curl 2.3 data.table data.table 1.10.4 DBI DBI 0.6 desc desc 1.1.0 devtools devtools 1.12.0 dichromat dichromat 2.0-0 digest digest 0.6.12 docopt docopt 0.4.5 doParallel doParallel 1.0.10 dplyr dplyr 0.5.0 dtplyr dtplyr 0.0.1 evaluate evaluate 0.10 forcats forcats 0.2.0 foreach foreach 1.4.3 formatR formatR 1.4 Formula Formula 1.2-1 gdtools gdtools 0.1.4 ggplot2 ggplot2 2.2.1 ggplot2movies ggplot2movies 0.0.1 git2r git2r 0.18.0 githubinstall githubinstall 0.2.1 gmailr gmailr 0.7.1 gridBase gridBase 0.4-7 gridExtra gridExtra 2.2.1 gtable gtable 0.2.0 haven haven 1.0.0 hexbin hexbin 1.27.1 highr highr 0.6 Hmisc Hmisc 4.0-2 hms hms 0.3 htmlTable htmlTable 1.9 htmltools htmltools 0.3.5 htmlwidgets htmlwidgets 0.8 httpuv httpuv 1.3.3 httr httr 1.2.1 hunspell hunspell 2.3 igraph igraph 1.0.1 irlba irlba 2.1.2 iterators iterators 1.0.8 jsonlite jsonlite 1.3 knitr knitr 1.15.1 labeling labeling 0.3 Lahman Lahman 5.0-0 latticeExtra latticeExtra 0.6-28 lazyeval lazyeval 0.2.0 lintr lintr 1.0.0 littler littler 0.3.2 lubridate lubridate 1.6.0 magrittr magrittr 1.5 mapproj mapproj 1.2-4 maps maps 3.1.1 maptools maptools 0.9-1 markdown markdown 0.7.7 MatrixModels MatrixModels 0.4-1 memoise memoise 1.0.0 microbenchmark microbenchmark 1.4-2.1 mime mime 0.5 miniUI miniUI 0.1.1 mnormt mnormt 1.5-5 modelr modelr 0.1.0 multcomp multcomp 1.4-6 munsell munsell 0.4.3 mvtnorm mvtnorm 1.0-6 NLP NLP 0.1-10 NMF NMF 0.20.6 nycflights13 nycflights13 0.2.2 openssl openssl 0.9.6 packrat packrat 0.4.8-1 pingr pingr 1.1.2 pkgmaker pkgmaker 0.22 PKI PKI 0.1-3 plogr plogr 0.1-1 plyr plyr 1.8.4 praise praise 1.0.0 profvis profvis 0.3.3 psych psych 1.6.12 purrr purrr 0.2.2 quantreg quantreg 5.29 R6 R6 2.2.0 RColorBrewer RColorBrewer 1.1-2 Rcpp Rcpp 0.12.10 RCurl RCurl 1.95-4.8 readr readr 1.0.0 readxl readxl 0.1.1 registry registry 0.3 remotes remotes 1.0.0 reshape2 reshape2 1.4.2 rex rex 1.1.1 RJSONIO RJSONIO 1.3-0 rmarkdown rmarkdown 1.3 rmdshower rmdshower 2.0.0 RMeCab RMeCab 0.99996 RMySQL RMySQL 0.10.9 rngtools rngtools 1.2.4 roxygen2 roxygen2 6.0.1 RPostgreSQL RPostgreSQL 0.4-1 rprojroot rprojroot 1.2 rsconnect rsconnect 0.7 RSQLite RSQLite 1.1-2 rstudioapi rstudioapi 0.6 rticles rticles 0.2 rversions rversions 1.0.3 rvest rvest 0.3.2 sandwich sandwich 2.3-4 scales scales 0.4.1 selectr selectr 0.3-1 servr servr 0.5 shiny shiny 1.0.0 slam slam 0.1-40 sourcetools sourcetools 0.1.5 sp sp 1.2-4 SparseM SparseM 1.76 stringdist stringdist 0.9.4.4 stringi stringi 1.1.2 stringr stringr 1.2.0 svglite svglite 1.2.0 testit testit 0.6 testthat testthat 1.0.2 TH.data TH.data 1.0-8 tibble tibble 1.2 tidyr tidyr 0.6.1 tidyverse tidyverse 1.1.1 tm tm 0.7-1 tufte tufte 0.2 viridis viridis 0.3.4 webshot webshot 0.4.0 whisker whisker 0.3-2 withr withr 1.0.2 xml2 xml2 1.1.1 xtable xtable 1.8-2 yaml yaml 2.1.14 zoo zoo 1.7-14
Appendix 2. Dockerfile
FROM rocker/tidyverse:latest MAINTAINER "ymattu" RUN apt-get update \ && apt-get install -y --no-install-recommends \ ghostscript \ imagemagick \ ## system dependency of hadley/pkgdown libmagick++-dev \ ## system dependency of hunspell (devtools) libhunspell-dev \ ## R CMD Check wants qpdf to check pdf sizes, or iy throws a Warning qpdf \ ## for git via ssh key ssh \ ## for building pdfs via pandoc/LaTeX lmodern \ texlive-fonts-recommended \ texlive-humanities \ texlive-latex-extra \ texinfo \ ## just because less \ vim \ && apt-get clean \ && rm -rf /var/lib/apt/lists/ \ ## R manuals use inconsolata font, but texlive-fonts-extra is huge, so: && cd /usr/share/texlive/texmf-dist \ && wget http://mirrors.ctan.org/install/fonts/inconsolata.tds.zip \ && unzip inconsolata.tds.zip \ && rm inconsolata.tds.zip \ && echo "Map zi4.map" >> /usr/share/texlive/texmf-dist/web2c/updmap.cfg \ && mktexlsr \ && updmap-sys \ ## And some nice R packages for publishing-related stuff && . /etc/environment \ && install2.r --error --repos $MRAN --deps TRUE \ bookdown rticles rmdshower ## For Japanse LaTeX environment RUN apt-get update RUN apt-get install -y --no-install-recommends \ ibus-mozc \ manpages-ja RUN apt-get install -y --no-install-recommends imagemagick \ texlive-lang-cjk \ texlive-luatex \ texlive-xetex \ xdvik-ja \ dvipsk-ja \ gv \ texlive-fonts-extra \ && apt-get clean \ && cd /usr/share/texlive/texmf-dist \ && wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip \ && unzip IPAexfont00301.zip \ && echo "Map zi4.map" >> /usr/share/texlive/texmf-dist/web2c/updmap.cfg \ && mktexlsr \ && updmap-sys ## Mecab RUN wget -O mecab-0.996.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" ;\ tar -xzf mecab-0.996.tar.gz ;\ cd mecab-0.996; ./configure --enable-utf8-only; make; make install; ldconfig ## Ipadic RUN wget -O mecab-ipadic-2.7.0-20070801.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" ;\ tar -xzf mecab-ipadic-2.7.0-20070801.tar.gz ;\ cd mecab-ipadic-2.7.0-20070801; ./configure --with-charset=utf8; make; make install ;\ echo "dicdir = /usr/local/lib/mecab/dic/ipadic" > /usr/local/etc/mecabrc ## Clean up RUN apt remove -y build-essential ;\ rm -rf rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* ;\ rm -rf mecab-0.996.tar.gz* ;\ rm -rf mecab-ipadic-2.7.0-20070801* ## Change environment to Japanese(Character and DateTime) ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 RUN sed -i '$d' /etc/locale.gen \ && echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \ && locale-gen ja_JP.UTF-8 \ && /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" RUN /bin/bash -c "source /etc/default/locale" RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ## Install additional R packages RUN Rscript -e "install.packages(c('githubinstall','tm','slam'))" RUN Rscript -e "install.packages('RMeCab',repos='http://rmecab.jp/R')" CMD ["/init"]