docker + JupyterNotebook + バイオインフォマティクス

Jupyter Notebook (以下Jupyter)でblastとかbowtieとかバイオインフォマティクスのツールを使えるようにします。

Jupyterのインストール

pip3 install jupyterとかanacondaとかやりだすと、CentOSで対応していないとか、Pythonのバージョンアップとかが必要になって面倒なので、dockerでjupyterのコンテナをつくります。
docker search jupyterとすると、docker.io/jupyter/datascience-notebookというのが一番上にくるので、これを使ってみます。

# docker pull docker.io/jupyter/datascience-notebook

jupyterのコンテナを作成する前に決めておかないといけないのが、jupyterを動かすポートとデータの置き場所です。
ポートはJupyterとブラウザーが通信するために必要で、dockerのホストの空きポートが必要です。ここでは8000を使うことにします。
データの置き場所はコンテナの外から触れるほうが便利ですが、パーミッションに気を付ける必要があります。ダウンロードしたイメージではJupyterはjovyan.users (ユーザーID:1000、グループID: 100)が実行者になっていて、このユーザーがファイルをつくったり、読んだりします。通常このユーザーはホスト側には存在していないので、Jupyterのホームとして使うディレクトリ(ここではdataとする)は777としておきます。

$ mkdir data
$ chmod 777 data

作成したdataディレクトリをホームとして、dockerのコンテナを作成します。8888はJupyterが使用するデフォルトのポートです。

# docker run -d --name myjupyter \
  --volume data:/home/jovyan \
  --publish 8000:8888 \
  docker.io/jupyter/datascience-notebook

起動したJupyterに接続するにはtoken (パスワードのようなもの)が必要です。通常はJupyterが起動時に標準出力に出すのですが、dockerを使っているので見えません。docker logsで調べます。

# docker logs myjupter
    To access the notebook, open this file in a browser:
        file:///home/jovyan/.local/share/jupyter/runtime/nbserver-8-open.html
    Or copy and paste one of these URLs:
        http://e66ec9ebc930:8888/?token=24631bee91de9734ea81b166864dc7d4f5926d52a33e8f92
     or http://127.0.0.1:8888/?token=24631bee91de9734ea81b166864dc7d4f5926d52a33e8f92

?token以降をコピーして接続します。ブラウザーでhttp://localhost:8000/(?token=以降を貼り付け) にアクセスするか、curlで動作を確認します。

$ curl "http://localhost:8000/tree(?token=以降を貼り付け)" | head
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Home Page - Select or create a notebook</title>

一度Jupyterを停止します。

# docker stop myjupter

Jupyterへのアクセス制限を解除する

Jupyterのトークンは起動するたびに変わります。都度URLを調べるのは面倒なのでトークンを使用しないようにします(Jupyterに使用するポートが外から接続できないことを確認してから)。
dataディレクトリに.jupyter/jupyter_notebook_config.pyを作成し、c.NotebookApp.token = "の一行をいれます。

$ mkdir data/.jupyter
$ echo "c.NotebookApp.token = ''" >data/.jupyter/jupyter_notebook_config.py

Jupyterを起動して、トークンなしで接続できることを確認します。

# docker stop myjupter
# curl "http://localhost:10080/tree?" | head
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Home Page - Select or create a notebook</title>

blastを使えるようにする

バイオインフォマティクスの最も重要なツールを使えるようにします。コンテナ内に入ってblastをダウンロード&インストールします。

# docker exec -it -u root myjupyter /bin/bash
root@e66ec9ebc930:~# apt-get update
root@e66ec9ebc930:~# apt-get install -y ncbi-blast+
root@e66ec9ebc930:~# exit

Jupyterに接続して、Terminalを開いてblastnなどのコマンドが使えるようになっていることを確認します。

exonerateでもbowtieでもapt-get installでインストールできます。