「DockerでRELION」の版間の差分
提供: Eospedia
(→Dockerイメージのビルド) |
(→Dockerイメージのビルド) |
||
行62: | 行62: | ||
$ docker build -t <Dockerイメージにつけたい名前> . | $ docker build -t <Dockerイメージにつけたい名前> . | ||
</pre> | </pre> | ||
+ | |||
+ | 私の場合は kttn8769/cryoem/relion:3.0.5-cuda9.2-gctf としました。 | ||
+ | |||
+ | (コロンの前はリポジトリ名、コロンの後ろはタグ名と言います。リポジトリ名はスラッシュで階層化できます。同一のリポジトリ名に対し複数のタグ名でイメージを作れます。バージョン管理やバリエーションの管理に使います。) |
2019年5月18日 (土) 03:38時点における版
下準備
- 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 としました。
(コロンの前はリポジトリ名、コロンの後ろはタグ名と言います。リポジトリ名はスラッシュで階層化できます。同一のリポジトリ名に対し複数のタグ名でイメージを作れます。バージョン管理やバリエーションの管理に使います。)