「DockerでRELION」の版間の差分
提供: Eospedia
(→Dockerfile書く) |
(→Dockerfile書く) |
||
行8: | 行8: | ||
** yum installで入れているパッケージは https://web.chaperone.jp/w/index.php?Relion 様を参考にしています | ** yum installで入れているパッケージは https://web.chaperone.jp/w/index.php?Relion 様を参考にしています | ||
** Dockerfileのデバッグしんどい | ** Dockerfileのデバッグしんどい | ||
+ | |||
* 以下の説明は上記Dockerfileのテンプレートを使用した場合について書きます。 | * 以下の説明は上記Dockerfileのテンプレートを使用した場合について書きます。 |
2019年5月18日 (土) 03:40時点における版
下準備
- 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イメージにつけたい名前> .
私の場合は kttn8769/cryoem/relion:3.0.5-cuda9.2-gctf としました。
(コロンの前はリポジトリ名、コロンの後ろはタグ名と言います。リポジトリ名はスラッシュで階層化できます。タグ名を変えることで、同一のリポジトリ名に対し複数の異なるイメージを作れます。バージョン管理やバリエーションの管理に使います。)