ゲノムブラウザ JBrowse 2 を Docker コンテナで Web サービスするローカル実行環境を作成してみた

2022.04.30

ゲノムブラウザの 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はリファレンスゲノムをダウンロード用に追加しました。

Dockerfile

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
  1. JBrowse CLI で /var/www/html/jbrowse2 に必要なファイルをダウンロード
  2. 可視化するゲノムデータのサンプルのためにショウジョウバエのリファレンスゲノムをダウンロード
  3. samtools faidxコマンドで FASTA にインデックスを付け
    1. *.faiファイルが生成されました
  4. jbrowse add-assemblyコマンドで FASTA ファイルを読み込んで必要なファイルを所定のパス配下にコピー
    1. 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は新規作成されダウンロードしたリファレンスゲノムのファイル名、インデックス付きのファイル名が書き込まれていました。

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 サーバーで提供できるゲノムブラウザがあることは知らなかったので勉強になりました。

参考