Dockerコンテナでバイオインフォツールを提供する

バイオインフォのツールは色々な形式で公開されているが、OSの違い、コンパイラ・インタプリタ・ソフトウェアのバージョンの違い、ディレクトリの違い、環境変数の違い...etcで、インストールに手こずる場合が多い。また、見かけ上計算できてもおかしな結果になっているのに気がつかなかったり、結果の再現性がとれなかったりする。

最近はDockerがあるので、確実に動くものをコンテナに入れて、コンテナを一つのソフトウェアとして使えば、Dockerが動く環境なら、確実に計算できるし再現性もあると思うので、試しにやってみた。

### まずDockerfileを作り込む
この作業自体は、docker run -it ubuntu bashでまっさらなubuntuマシン内で少しづつ行った

↓Dockerfileの中身↓

```
FROM ubuntu

MAINTAINER KOKI TSUYUZAKI

RUN sudo apt-get -y update
RUN sudo apt-get -y upgrade
RUN sudo apt-get -y install wget unzip python
RUN wget http://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.2.4/bowtie2-2.2.4-linux-x86_64.zip
RUN wget http://ccb.jhu.edu/software/tophat/downloads/tophat-2.0.13.Linux_x86_64.tar.gz
RUN unzip bowtie2-2.2.4-linux-x86_64.zip
RUN tar zxvf tophat-2.0.13.Linux_x86_64.tar.gz
ENV PATH $PATH:/tophat-2.0.13.Linux_x86_64:/bowtie2-2.2.4
RUN mkdir data
```
dataディレクトリを作っておくのが重要（後で説明）

### Dockerfileを元にDockerイメージを作る
あらかじめ
[boot2dockerのメモリを増やす](http://qiita.com/python_spameggs/items/dd51eab33ad07084a0b6)
と
[boot2dockerのディスク容量に空きが無くなってイメージのビルドに失敗する問題](http://qiita.com/nyamage/items/d34db9daa51d40fbe3e5)
をやっておく
```
boot2docker start
docker build -t koki/tophat2 .
```
### DockerHubにpushする
```
docker push koki/tophat2
```
### DockerHubからpullしてみる（違うPCで確認した）
```
docker pull koki/tophat2
```

### DRAからFASTQを取得する
```
wget -O - -o /dev/null ftp://ftp.ddbj.nig.ac.jp/ddbj_database/dra/fastq/SRA061/SRA061556/SRX204468/SRR616850_1.fastq.bz2 | bunzip2 > SRR616850_1.fastq
wget -O - -o /dev/null ftp://ftp.ddbj.nig.ac.jp/ddbj_database/dra/fastq/SRA061/SRA061556/SRX204468/SRR616850_2.fastq.bz2 | bunzip2 > SRR616850_2.fastq
```
### EnsemblでMouse reference genomeのBowtie2 Indexを取得する
```
wget ftp://igenome:G3nom3s4u@ussd-ftp.illumina.com/Mus_musculus/Ensembl/GRCm38/Mus_musculus_Ensembl_GRCm38.tar.gz
tar xvfz Mus_musculus_Ensembl_GRCm38.tar.gz
```
### dataディレクトリを作り解析に必要なデータを置く（ここがコンテナ内との共有ディレクトリになる）
```
mkdir data
cp SRR616850_1.fastq data
cp SRR616850_2.fastq data
cp Mus_musculus_Ensembl_GRCm38/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/* data
ls data # 必要なデータが置かれた
```
### Bowtie2を実行（-vで共有ディレクトリを指定）
```
docker run koki/tophat2 bowtie2 --version # bowtie2のパスが通っている
docker run koki/tophat2 tophat2 --version # tophat2のパスが通っている
docker run -v $(pwd)/data:/data koki/tophat2 tophat2 -r 54 -o data data/genome data/SRR616850_1.fastq data/SRR616850_2.fastq

ls data # SAMファイルができているのがわかる
```
### その他
#### データサイズ
data : 50.92GB
 - genome.1.bt2 : 886.7MB
 - genome.2.bt2 : 661.9MB
 - genome.3.bt2 : 5KB
 - genome.4.bt2 : 661.9MB
 - genome.fa : 2.77GB
 - genome.rev.1.bt2 : 886.7MB
 - genome.rev.2.bt2 : 661.9MB
 - SRR616850_1.fastq : 22.2GB
 - SRR616850_2.fastq : 22.2GB

#### 計算時間
docker build : 1.53 min
docker push : 1.25 min
docker pull : 1.24 min
docker run : 数日レベル（実質tophat2が走っている時間のため）

#### 雑感
~~作業を続けてると段々docker buildが重くなった（imageが蓄積されている?）~~
→ && apt-get cleanをapt-getしたら毎回やる

~~docker runが動いている間、Ctrl + C, Ctrl + Dとかで止めることはできない？~~
→ Ctrl + Zで一回出て、dockerのプロセスをkillするしかないかも

[BioLinux](http://environmentalomics.org/bio-linux/)みたいにバイオツールを全部入れたOSごと提供するのも手だが、個人的にはDockerを使ってツール毎にコンテナに入れて提供するほうが1コンテナ1プロセスでさくさく動いていいと思う。

~~コンテナ内で-p 4とかしたとして、ホストのコアをちゃんと4つ使ってる事になるのか~~
→ コンテナ内で4つある事は見えたから、多分いける