rocker/verse:4.0.2を使おうとして躓いた

カテゴリ: r docker

RをDockerで簡単に使えるようにするプロジェクトとしてrockerがあります。こいつ、R 3.x.x系とR 4.x.x系でDockerfileの書き方が結構変わったので、拡張イメージを作っている人は要注意です。

たとえばrocker/verse:3.6.3まではTinyTexを用いてtexliveをopt/TinyTeX下にインストールしていました(ソース)。ところがrocker/verse:4.0.0以後はTinyTeXを用いず/usr/local/texlive/bin/x86_64-linux/にインストールしているようです(ソース)。

これの何が問題かというと、 LaTeXの追加パッケージの導入のためにDockerfile内でtlmgr installした場合には、パッケージのインストール先のディレクトリの権限を再設定しておく必要がるのです(3.6.34.x.x)。本家のDockerfileのように、拡張Dockerfileを書くときも権限を修正しなければなりません。で、3.6.3系のつもりで4.x.x系を拡張しようとすると、権限を変更したいディレクトリのパスを間違ってしまって、イメージをビルドできなくなるわけですね。

というわけで、本家の更新に合わせて解決。

R 3.6.3までのDockerfileは、インストールするRパッケージなどをDockerfile内に直接書き込んでいる感じでした。これがR 4.x.xからは、install_verse.shとかinstall_texlive.shとか、おおまかに何をインストールするかによってシェルスクリプトを切り出し、モジュール化しているようですね。シェルスクリプトを更新すれば、過去の各バージョンのDockerfileを一括して変更できるので、妥当な進化をたどっていると思います。