CentOS6 on Google Compute EngineにDockerを入れ、Genome解析ツールをセットアップする

# CentOS6 on Google Compute EngineにDockerを入れ、Genome解析ツールをセットアップする

Genome解析ツールをGCE上で動かせる環境を構築します。
（次のツールをDockerコンテナ上にChefでインストールします）

- bwa
- samtools
- bowtie
- bowtie2
- VICUNA

## 1. GCEインスタンスに永続ディスクを追加します。

ncbi toolsのbuildに大きな領域(42GBくらい)が必要になるので、
500GBの永続ディスクを追加します。

### 1.1.コンソールの[COMPUTE ENGINE]-[ディスク]-[New disk]で追加します。

例：disk-1

アタッチするインスタンスと同じゾーンに作成する必要があります。

### 1.2.インスタンスにアタッチします。

インスタンス作成時に`詳細設定を表示`をクリックし、`ディスクを追加`で作成したdisk-1を選択します。

### 1.3.インスタンスにログインします。

### 1.4.mountしたい場所を作成します。

```bash
sudo mkdir /data
```

### 1.5.フォーマットかつマウントします。

デフォルトでは/dev/disk/by-id/google-xxxxに作成されています。

```bash
sudo /usr/share/google/safe_format_and_mount -m "mkfs.ext4 -F" /dev/disk/by-id/google-disk-1 /data
```

フォーマットせずマウントのみであれば次を実行します。

```bash
sudo /usr/share/google/safe_format_and_mount /dev/disk/by-id/google-disk-1 /data
```

### 1.6.mountされたことを確認します。

```bash
sudo df -h
```
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.9G  1.1G  8.3G  12% /
tmpfs           3.5G     0  3.5G   0% /dev/shm
**/dev/sdb        493G  198M  467G   1% /data**

## 2. GCE側に`/data/tmp`を作成します。

Dockerのワーク領域として作成します。

```bash
sudo mkdir /data/tmp
```

## 3. CentOS6 on GCEにDockerをインストールします。

```bash
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum -y install docker-io
sudo service docker start
sudo chkconfig docker on
```

## 4. Docker用のtmpディレクトリを`/data/tmp`に設定します

Dockerコンテナが大きくなるので、追加した永続ディスクに変更しないと
Error: write /tmp/docker-build199553949/xxx: no space left on device
といったエラーが発生します。

`/etc/sysconfig/docker`に1行追加します。

```bash:/etc/sysconfig/docker
export TMPDIR=/data/tmp
```

dockerを再起動します。

```bash
sudo service docker restart
```

## 5. コンテナ用の自前のDockerfileと初期化用ファイルを取得します。

（Ubuntu 14.04にruby+chefをインストールするお試し設定）

https://github.com/t-oginogin/dockerfiles

```bash
cd /data/
sudo yum install curl
sudo curl -o Dockerfile https://raw.githubusercontent.com/t-oginogin/dockerfiles/master/ubuntu/Dockerfile_chef
```

## 6. Dockerfileをビルドします。

```bash
sudo docker build -t t.oginogin/chef .
```

## 7. Dockerコンテナを起動します。

Dockerコンテナ側にも追加した永続ディスクをマウントします。
/data/ngsを作成してコンテナ側の/ngsにマウントします。

```bash
sudo mkdir /data/ngs
```

```bash
sudo docker run -it --name chef -v /data/ngs:/ngs t.oginogin/chef /bin/bash
```

## 8. rootでbashが起動するので、ユーザーubuntuでシェルを起動します。

```bash
su - ubuntu
```

## 9. ChefでGenome解析ツールをインストールします。

### 9.1. VICUNAをインストールする場合は、まずvicuna.zipをダウンロードし、GCE側のにアップロードしておきます。

**注：作業はローカルマシンで行います。**

vicuna.zipは次のサイトからダウンロードします。
ダウンロードにはユーザー登録が必要です。

http://www.broadinstitute.org/scientific-community/science/projects/viral-genomics/vicuna

ダウンロードしたvicuna.zipをGGE側にアップロードするには次のコマンドを実行します。
（TYPE-GOOGLE-COMPUTE-ENGINE-PUBLIC-IP-HEREはターゲットのIPアドレスに置き換えてください）

```bash
scp -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i $HOME/.ssh/google_compute_engine vicuna.zip $USER@TYPE-GOOGLE-COMPUTE-ENGINE-PUBLIC-IP-HERE:/home/$USER
```

recipeでは/ngs/tmp/vicuna.zipに配置されていることを想定しているので、
移動しておきます。

```bash
sudo mkdir /data/ngs/tmp
sudo mv ~/vicuna.zip /data/ngs/tmp/
```

### 9.2. recipeを取得します。

Dockerコンテナ上での作業に戻ります。

```bash
sudo git clone https://github.com/t-oginogin/ngs_recipes.git /ngs/ngs_recipes
```

### 9.3. localhost.json内のパラメータ（user,passwordなど）を適宜変更します。

### 9.4. solo.rb内のcookbook_pathを適宜変更します。

取得したrecipeではworkに/ngs/chef-soloを使うことにしているので作成しておきます。

```bash
sudo mkdir /ngs/chef-solo
```

### 9.5. recipeを実行します。

```bash
cd /ngs/ngs_recipes
sudo chef-solo -c solo.rb -j ./localhost.json
```

## 10. recipe実行が終わればツールインストールが終わったので、Ubuntuから抜けます。

```bash
exit
exit
```

## 11. Dockerイメージを保存します。

```bash
sudo docker commit chef t.oginogin/ngs
```

## 12. 保存したイメージからコンテナを起動します。

```bash
sudo docker run -it --name ngs  -v /data/ngs:/ngs t.oginogin/ngs /bin/bash
```

## 13. セットアップしたユーザーに切り替えます。

```bash
su - ubuntu
```

## 14. 各ツールが使えるようになっているか確認します。

```bash
bwa
bowtie
bowtie2
samtools
vicuna-omp-v1.0
```