DockerでRELION
提供: Eospedia
下準備
- DockerとNVIDIA Dockerをインストールする。→ DockerとNVIDIA_Dockerのインストール
Dockerfile書く
- 取り急ぎ書いたDockerfileのテンプレートを公開しておきます。
- https://github.com/kttn8769/cryoem-docker.git
- yum installで入れているパッケージは https://web.chaperone.jp/w/index.php?Relion 様から拝借いたしました。
- Dockerfileのデバッグしんどい
- 以下の説明は上記Dockerfileのテンプレートを使用した場合について書きます。
- Dockerの使い方としてまともかどうかわからないので、もしかすると参考にしないほうがいいかもしれません。
$ git clone https://github.com/kttn8769/cryoem-docker.git $ cd cryoem-docker
cryoem-docker内のDockerfileの以下の部分について、適切に設定してください。
### Base image: DockerHub nvidia/cuda, CUDA v9.2, cuDNN v7, development package, CentOS7 FROM nvidia/cuda:9.2-cudnn7-devel-centos7 ### User account in Docker image # username ARG USER_NAME="" # UID ARG USER_ID="" # GID ARG GROUP_ID="" # SSH public key ARG USER_SSH_PUBKEY="" ### Software configs ARG RELION_VERSION="3.0.5" ARG RELION_BUILD_NUM_THREADS="12" ARG GCTF_BIN_URL="https://www.mrc-lmb.cam.ac.uk/kzhang/Gctf/Gctf_v1.18_b2/bin/Gctf_v1.18_b2_sm61_cu9.2" ARG GCTF_LIB_URL="https://www.mrc-lmb.cam.ac.uk/kzhang/Gctf/Gctf_v1.18_b2/lib/libEMcore_sm61_cu9.2.so"
特にユーザーを作らずにDockerコンテナを立ち上げると、rootユーザーしか存在しません。Dockerコンテナ内でのrootユーザーはホストマシンにおいてもrootユーザーと認識されるため、ホストマシンのディレクトリをコンテナにマウントした時にファイル所有権の関係で鬱陶しいことになります。コンテナにsshする時にも問題になります。
ということで、上記の様にDockerfileの冒頭で、ホストマシンのユーザーと同じユーザー名、UID、GIDを持つユーザーを作成しています。こうするとファイル共有もsshも楽になります。
UIDとGIDは以下コマンドで調べてください。Ubuntuだと4桁の数字になると思います。
$ id uid=1003(kttn) gid=1006(kttn) groups=1006(kttn),27(sudo),999(docker),2002(vglusers)
また、GCTFのsmも、ホストマシンのGPUのcompute capabilityを調べて適切なものに変更してください。
USER_SSH_PUBKEYには、ユーザーのssh公開鍵の中身をそのままコピペします。そうすることで、ホストマシンから鍵交換でコンテナ内にsshログインできます。
Dockerイメージのビルド
Dockerfileがあるディレクトリで、Dockerイメージをビルドします。最後のピリオドを忘れない様に。
$ docker build -t <Dockerイメージにつけたい名前> .