3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerコンテナ内のRで図をプロットする

Last updated at Posted at 2020-05-21

はじめに

R の tidyverse パッケージ群を含む docker イメージとして rocker/tidyverse が有名です。ただし、これらのイメージは(恐らく)RStudio を使用する前提で作成されています。

私は RStudio を使用しておらず、以下のような経緯もあってコンテナ内の R でプロットを表示させる方法を調べてみました。

  1. R のパッケージのバージョンを固定したい
  2. tidyverse パッケージ群のインストールは時間がかかる
  3. rockerjp/tidyverse を使用すれば、自分で大量のパッケージをインストールしなくてすむため便利だろう
  4. コンテナ内の R でプロットを表示させたい

参考URL

これらのリンク先の設定と比較すると項目が少ないですが、恐らく使用した R のコンテナ内で設定されているからと思います。

実例その1:r-base イメージの場合

まず、R の公式イメージである r-base で試しました。試行錯誤した後の結果を示します。

設定項目

  • -u docker
    • これを指定しないとプロットが表示されませんでした
  • -e DISPLAY=$DISPLAY および -v /tmp/.X11-unix:/tmp/.X11-unix
    • 参考記事を参照
docker run --rm -it \
  -u docker \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
    r-base R
boxplot(iris$Sepal.Length ~ iris$Species)
unnamed-chunk-2-1.png

プロットされました。

実例その2:rockerjp/tidyverse イメージの場合

とりあえずチャレンジ

先程と異なり、ユーザー名は rstudio とします(元々のイメージ内で指定されています)。

docker run --rm -it \
  -u rstudio \
  -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
  rockerjp/tidyverse R
> boxplot(iris$Sepal.Length ~ iris$Species)
Error in (function (display = "", width, height, pointsize, gamma, bg,  : 
  X11 module cannot be loaded
In addition: Warning message:
In grSoftVersion() :
  unable to load shared object '/usr/local/lib/R/modules//R_X11.so':
  libXt.so.6: cannot open shared object file: No such file or directory

このようにエラーが出てしまい、プロットされませんでした。
libXt.so.6 が不足しているようです。

libxt6 パッケージを追加したイメージの場合

そこで、以下のような Docker ファイルを用意しました。

FROM rockerjp/tidyverse:latest

RUN apt-get update \
    && apt-get install -y libxt6

ビルドします。イメージ名は仮に mytidyverse とします。

docker build -t mytidyverse .
docker run --rm -it \
  -u rstudio \
  -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
  mytidyverse R
boxplot(iris$Sepal.Length ~ iris$Species)

図は省略しますが今度はプロットされました。

tidyverse がインストールされているので ggplot2 でも試してみます。

library(ggplot2)
ggplot(iris, aes(Species, Sepal.Length)) +
    geom_boxplot()
unnamed-chunk-9-1.png

これもプロットされました。

おわりに

rockerjp/tidyverse のコンテナ内で R を起動して、プロットすることに成功しました。これで自分で tidyverse パッケージ群をインストールせずに済みます。

公式イメージで libxt6 パッケージを追加してもらえれたら今回のような手間は減るのですが……(他力本願)

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?