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.3、4.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を一括して変更できるので、妥当な進化をたどっていると思います。