ゲノムブラウザ JBrowse 2 を Docker コンテナで Web サービスするローカル実行環境を作成してみた
ゲノムブラウザの JBrowse 2 で動作確認したいことがあったので Docker コンテナで実行環境を作成しました。公式ドキュメントには Docker コンテナでの実行環境の提供はなかったので作り方を紹介します。
今回は JBrowse 2 を Web サーバーでゲノムブラウザの Web サービスを提供するローカル実行環境を Docker コンテナで作成します。
JBrowse とは
JBrowse はゲノムブラウザ(ゲノムデータの可視化ツール)の一種です。ゲノムブラウザは多種存在しており、OSS から商用のものもあります。 以下のリンクに各種ゲノムブラウザの情報がまとめられています。
cmdcolin/awesome-genome-visualization
JBrowse には現在 JBrowse 1(無印)と、後継の JBrowse 2 の2系統あります。現時点では JBrowse 1 のメンテナンスは続いているようです。
以前は JBrowse 1 にあった機能が JBrowse 2 ではなくなり、完全な上位互換ではありませんでした。現在は機能比較表を確認する限り JBrowse 2 は JBrowse 1 で提供していた機能をすべてカバーできているようです。
Dockerfile 作成
Super-quick start guideを参考に JBrowse の実行コマンドが利用できる下準備を済ませる Dockerfile を作成しました。
wget
はリファレンスゲノムをダウンロード用に追加しました。
FROM node:slim RUN apt-get update && apt-get install -y \ wget \ genometools \ samtools \ tabix \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN npm install -g @jbrowse/cli
ビルドします。イメージサイズは 340 MB
と軽量ですね。
$ docker build -t jbrowse2:v1 . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE jbrowse2 v1 7910d3f2608f 14 hours ago 340MB
JBrowse の設定
ローカル PC の Web ブラウザから JBrowse へアクセスできるように3000番ポートをマッピングして起動しました。
$ docker run -it -p 3000:3000 jbrowse2:v1 bash
JBrowse の CLI ツールのバージョンは1.7.6
の環境で以降の作業を進めていきます。
# jbrowse --version @jbrowse/cli/1.7.6 linux-x64 node-v18.0.0
- JBrowse CLI で
/var/www/html/jbrowse2
に必要なファイルをダウンロード - 可視化するゲノムデータのサンプルのためにショウジョウバエのリファレンスゲノムをダウンロード
samtools faidx
コマンドで FASTA にインデックスを付け*.fai
ファイルが生成されました
jbrowse add-assembly
コマンドで FASTA ファイルを読み込んで必要なファイルを所定のパス配下にコピーconfig.json
に読み込んだファイルの情報を追加されました
# jbrowse create /var/www/html/jbrowse2 # cd /tmp # wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/215/GCF_000001215.4_Release_6_plus_ISO1_MT/GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.gz # gunzip GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.gz # samtools faidx GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna # jbrowse add-assembly GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna --out /var/www/html/jbrowse2 --load copy
/var/www/html/jbrowse2
配下は以下の構成になりました。
# ls -l /var/www/html/jbrowse2 total 142372 -rw-r--r-- 1 root root 145657746 Apr 30 02:00 GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna -rw-r--r-- 1 root root 66977 Apr 30 02:00 GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.fai -rw-r--r-- 1 root root 15317 Apr 30 01:59 asset-manifest.json -rw-r--r-- 1 root root 771 Apr 30 02:00 config.json -rw-r--r-- 1 root root 15086 Apr 30 01:59 favicon.ico -rw-r--r-- 1 root root 570 Apr 30 01:59 index.html -rw-r--r-- 1 root root 294 Apr 30 01:59 manifest.json -rw-r--r-- 1 root root 57 Apr 30 01:59 robots.txt drwxr-xr-x 5 root root 4096 Apr 30 01:59 static drwxr-xr-x 8 root root 4096 Apr 30 01:59 test_data -rw-r--r-- 1 root root 5 Apr 30 01:59 version.txt
config.json
は新規作成されダウンロードしたリファレンスゲノムのファイル名、インデックス付きのファイル名が書き込まれていました。
{ "assemblies": [ { "name": "GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna", "sequence": { "type": "ReferenceSequenceTrack", "trackId": "GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna-ReferenceSequenceTrack", "adapter": { "type": "IndexedFastaAdapter", "fastaLocation": { "uri": "GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna", "locationType": "UriLocation" }, "faiLocation": { "uri": "GCF_000001215.4_Release_6_plus_ISO1_MT_genomic.fna.fai", "locationType": "UriLocation" } } } } ], "configuration": {}, "connections": [], "defaultSession": { "name": "New Session" }, "tracks": [] }
JBrose 実行環境の準備は完了しました。ローカル PC の Web ブラウザからアクセスして確認してみます。
# npx serve -n . Need to install the following packages: serve Ok to proceed? (y) y ┌───────────────────────────────────┐ │ │ │ Serving! │ │ │ │ Local: http://localhost:3000 │ │ │ └───────────────────────────────────┘
補足 サーバー起動時のエラー対応
npx serve .
実行時に以下のエラーが表示されました。ちなみにエラーは表示されるものの Web ブラウザからローカルサーバーへアクセスはできました。
ERROR: Cannot copy to clipboard: Couldn't find the `xsel` binary and fallback didn't work. On Debian/Ubuntu you can install xsel with: sudo apt install xsel
xsel
があれば解決するのかなとapt install xsel
した後にnpx serve .
を実行すると今度は以下のエラーが表示されました。
ERROR: Cannot copy to clipboard: Both xsel and fallback failed
最終的にこちらのリンクを参考に-n, --no-clipboard
を追加し回避しました。
参考までに今回の実行環境のバージョンは以下になります。
# node --version v18.0.0 # npx --version 8.6.0
Web ブラウザでアクセスする
Web ブラウザから http://localhost:3000
を開くと JBrowse へアクセスできました。
事前に設定済みのショウジョウバエのリファレンスゲノムを開いてみます。
虫メガネアイコンから最大限拡大すると塩基配列を確認できます。コンテナで簡単に JBrowse の動作環境が作成できました。
JBrowse で使うディレクトリには永続ストレージを
コンテナで実行したみた感想としては JBrowse で利用するディレクトリ(/var/www/html
)にローカル PC のディレクトリをマウントして使うと便利そうです。
たとえばローカル PC の/Users/ohmura.yasutaka/work/jbrowse/vol
を /var/www/html
にマウントして起動する以下の様になります。
$ docker run -it -p 3000:3000 -v /Users/ohmura.yasutaka/work/jbrowse/vol:/var/www/html jbrowse2:v1 bash
コンテナ内で jbrowse create /var/www/html/jbrowse2
コマンドを実行するとローカルディレクトリにファイルが保存されていますね。
$ pwd /Users/ohmura.yasutaka/work/jbrowse $ tree -L 3 . └── vol └── jbrowse2 ├── asset-manifest.json ├── favicon.ico ├── index.html ├── manifest.json ├── robots.txt ├── static ├── test_data └── version.txt 4 directories, 6 files
おわりに
Web サーバーで動作するゲノムブラウザを触ってみたくてコンテナでサクッと準備した記録でした。 以前、デスクトップ版のゲノムブラウザの IGV(Integrative Genomics Viewer)を EC2 で実行してみたことがあったのですが、Web サーバーで提供できるゲノムブラウザがあることは知らなかったので勉強になりました。