ROOTでおさらいするDockerの使い方
Docker のコマンドを使わないとすぐ忘れてしまうので覚え書き。
Releases | ROOT a Data analysis Framework
これを見てると今は CentOS, Fedora, Ubuntu, mac, そして Windows (復活してる!) のバイナリが配布されているようだけど、少し前は Scientific Linux と Mac のバイナリだけが配布されていて、研究室に新たな学生が来たらまずビルドさせるところから、みたいな感じがあった。これを Docker 使ったら簡単に、みんなのバージョンを合わせつつできないかということでやってみた。Jupyter に ROOT のカーネルをつけた Docker Image をつくりたいので、その前段階として。
インストールとイメージ作成
今回は最近借り出したさくらVPSの CentOS 7 に Docker を入れてやってみる。インストールは一応 yum で一発でできる。
sudo yum install docker
インストールしたら、以下で Docker のデーモンが動く。多分。このあたりはよく分かってない。
sudo systemctl start docker
ROOT の Dokerfile は公式にある。
https://hub.docker.com/r/rootproject/root-ubuntu16/
sudo docker pull rootproject/root-ubuntu16
で Docker Image をつくることができる。Linux だと毎回 sudo
するのが面倒。
sudo docker images
すると以下のように ROOT のイメージができている。
REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/rootproject/root-ubuntu16 latest e36801b84e23 5 weeks ago 1.6 GB
なお IMAGE ID について、全部打つ必要はなく一意に決まれば良くて、例えば今の場合 e
とだけ指定すれば起動したりできるということをさっきドットインストールを見て知った。
https://dotinstall.com/lessons/basic_docker/27705
起動
今回の場合つくった image からコンテナをつくって起動するのに、 docker run
しようとしたら
docker-runc not installed on system.
というエラーが出た。
これは以下を参考に、
centos7 - docker-runc not installed on system - Stack Overflow
cd /usr/libexec/docker/ sudo ln -s docker-runc-current docker-runc
してからデーモンを走らせ直して解決。
sudo docker run docker.io/rootproject/root-ubuntu16 -it
のようにすれば
------------------------------------------------------------------------- | Welcome to ROOT 6.12/07 http://root.cern.ch | | (c) 1995-2017, The ROOT Team | | Built for linuxx8664gcc | | From heads/v6-12-00-patches@v6-12-06-46-g7a7d314, Jun 15 2018, 18:29:00 | | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' | ------------------------------------------------------------------------- root [0]
のように表示されて ROOT が起動したはず。今の場合、Image ID が e36801b84e23 で、
sudo docker run -it e
としても一意に決まる場合はOK。 -it
はインタラクティブなシェルを始めるオプション。
ボリュームのマウント
これだけだと何もできないので、ボリュームをマウントして、ローカルでつくったスクリプトを走らせる。マウントするには、docker run -v ローカルの場所:コンテナ上で場所
というように指定する。ローカルに ~/test/test.cpp
という 'hello world' を出力するスクリプトがあるとして、~/test
をコンテナ上で /var/lib/docker/volumes/test
にマウントして実行するような場合を仮定すると、
sudo docker run -v ~/test:/var/lib/docker/volumes/test docker.io/rootproject/root-ubuntu16 root -b /var/lib/docker/volumes/test/test.cpp
という感じ。あるいは bash で入って実行しても良い。
sudo docker run -it -v ~/test:/var/lib/docker/volumes/test docker.io/rootproject/root-ubuntu16 bash root -b /var/lib/docker/volumes/test/test.cpp
今回は X11 を設定していない。あとボリューム周りは複雑そうなので「docker ボリューム永続化」でググるといろいろ情報が出てくる。
今回使ったコマンドまとめ
docker pull
: イメージを取ってくるdocker images
: イメージ一覧を表示docker run
: 新しいコンテナの起動-it
オプション: インタラクティブ-v
オプション: ボリュームをマウント