この記事の概要
- 特定のR/BioconductorのパッケージをインストールしたDockerイメージを作成する記事です。
- 例としてBioconductorのパッケージ sleuth をインストールしたイメージを作成します。
Dockerfileを置くGitHubのリポジトリの作成
Dockerfile専用のリポジトリDockerfiles
を作成
Dockerfileの作成
作業用ディレクトリの準備
$ mkdir Dockerfiles
$ cd Dockerfiles
$ mkdir sleuth
$ cd sleuth
上記のディレクトリに以下のDockerfile
を作成。
BioconductorのパッケージをbiocLite
でインストール。
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