R
Bioconductor
docker
bioinformatics

特定のR/BioconductorのパッケージをインストールしたDockerイメージを作成してみる

この記事の概要

  • 特定のR/BioconductorのパッケージをインストールしたDockerイメージを作成する記事です。
  • 例としてBioconductorのパッケージ sleuth をインストールしたイメージを作成します。

Dockerfileを置くGitHubのリポジトリの作成

Dockerfile専用のリポジトリDockerfilesを作成

Dockerfileの作成

作業用ディレクトリの準備

$ mkdir Dockerfiles
$ cd Dockerfiles
$ mkdir sleuth
$ cd sleuth

上記のディレクトリに以下のDockerfileを作成

Dockerfile
FROM bioconductor/release_base2:R3.5.0_Bioc3.7
MAINTAINER hoge <hoge@gmail.com>

RUN R -e 'source("http://bioconductor.org/biocLite.R"); \
biocLite("devtools", ask=F); \
biocLite("getopt", ask=F); \
biocLite("remotes", ask=F); \
biocLite("pachterlab/sleuth", ask=F); \
biocLite("grimbough/biomaRt", ask=F)'

RUN mkdir /data

上記のDockerfileからイメージdocker-username/sleuthを作成
docker-usernameはDocker Hubに登録したID

$ docker build -t docker-username/sleuth .

イメージ作成が失敗したら、Dockerfileを修正してやり直し

作成したイメージが動くかを試す

$ docker run --rm -it docker-username/sleuth /bin/bash
# R
R version 3.5.0 (2018-04-23) -- "Joy in Playing"
(中略)
> library("sleuth")
(正常にパッケージがロードできることを確認)
> sessionInfo()
R version 3.5.0 (2018-04-23)
(中略)
other attached packages:
[1] sleuth_0.30.0        BiocInstaller_1.30.0
(中略)
# exit

DockerfileをGitHubへコミット

Dockerfileを格納したディレクトリsleuthの上位ディレクトリDockerfilesをコミット

$ cd Dockerfiles
$ echo "# Dockerfiles" >> README.md
$ git init
$ git add .
$ git commit -m "first commit”
$ git remote add origin git@github.com:username/Dockerfiles.git
$ git push -u origin master

コミット後のリポジトリはこのような感じです

DockerHubのリポジトリの作成しイメージを登録

GitHubのリポジトリに置いたDockerfileを参照

  • DockerHubにログイン
  • Create -> Create Automated Build -> Create Auto-build Github
  • Dockerfileを格納したリポジトリを選択
  • Repository Name は作成したいイメージ名 -> Create
  • Build Settings タブ
    • When active, builds will happen automatically on pushes. のチェックを外す
    • Dockerfile LocationはDockerfileを置いたディレクトリを指定/sleuth
    • Docker Tag Nameにイメージのバージョン(メインパッケージの)を指定0.30.0
    • Save Changesをクリック
    • Triggerをクリックするとイメージがビルドされる
  • Build Details タブ
    • Successになればビルドが完了

Docker Hubからイメージをダウンロード

# テストでローカルに作成したイメージを先に削除
$ docker rmi youyuh48/sleuth
$ docker pull youyuh48/sleuth:0.30.0

作成したコンテナ内でRのスクリプトを動かす

  • -vでホストのカレントディレクトリがコンテナ内の/dataからアクセスできる
  • カレントディレクトリ内のRのスクリプトhoge.Rを実行
  • スクリプトの引数に入出力ファイルのパスを/data/xxxのように渡す
  • スクリプトの出力ファイルoutput.txtがホストのカレントディレクトリにできる
$ docker run --rm -it -v `pwd`:/data \
 youyuh48/sleuth:0.30.0 \
 Rscript /data/hoge.R /data/input.txt /data/output.txt

参考