★データ解析備忘録★

ゆる〜い技術メモ

RStudio Server + tidyverse + RMeCab で日本語もOKなDockerイメージを作りました

内容をアップデートしました

y-mattu.hatenablog.com

はじめに

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}'

f:id:songcunyouzai:20170330204504p:plain

テスト環境

OS X Sierra でテストしています。

不具合報告、要望などは

以下のGit Hub レポジトリへIssueを投げる(日本語でOK)か、Twitter@y__mattu へお願いします。

github.com

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"]