「DockerでRELION」の版間の差分

提供: Eospedia
移動: 案内検索
(Dockerコンテナのコマンドラインシェルを起動)
(Dockerfile書く)
行42: 行42:
 
</pre>
 
</pre>
  
特にユーザーを作らずにDockerコンテナを立ち上げると、rootユーザーしか存在しません。Dockerコンテナ内でのrootユーザーはホストマシンにおいてもrootユーザーと認識されるため、ホストマシンのディレクトリをコンテナにマウントした時にファイル所有権の関係で鬱陶しいことになります。コンテナにsshする時にも問題になります。
+
特にユーザーを作らずにDockerコンテナを立ち上げると、rootユーザーしか存在しません。Dockerコンテナ内でのrootユーザーはホストマシンにおいてもrootユーザーと認識されるため、ホストマシン内のユーザー所有ディレクトリをコンテナにマウントした時にファイル所有権の関係で鬱陶しいことになります。コンテナにsshする時にも問題になります。
  
ということで、上記の様にDockerfileの冒頭で、ホストマシンのユーザーと同じユーザー名、UID、GIDを持つユーザーを作成しています。こうするとファイル共有もsshも楽になります。
+
ということで、上記の様にDockerfileの冒頭でホストマシンのユーザーと同じユーザー名、UID、GIDを設定し、Dockefileの後の方で当該ユーザーを作成しています。こうするとファイル共有もsshも楽になります。
  
UIDとGIDは以下コマンドで調べてください。Ubuntuだと4桁の数字になると思います。
+
UIDとGIDはホストマシンで以下コマンドで調べてください。
  
 
<pre>
 
<pre>
行54: 行54:
  
  
また、GCTFのsmも、ホストマシンのGPUのcompute capabilityを調べて適切なものに変更してください。
+
また、GCTFのsmも、ホストマシンのGPUのcompute capabilityを調べて適切なものに変更してください。([[Gctf]]を参照)
  
 
USER_SSH_PUBKEYには、ユーザーのssh公開鍵の中身をそのままコピペします。そうすることで、ホストマシンから鍵交換でコンテナ内にsshログインできます。
 
USER_SSH_PUBKEYには、ユーザーのssh公開鍵の中身をそのままコピペします。そうすることで、ホストマシンから鍵交換でコンテナ内にsshログインできます。

2019年5月18日 (土) 03:55時点における版

下準備


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を設定し、Dockefileの後の方で当該ユーザーを作成しています。こうするとファイル共有もsshも楽になります。

UIDとGIDはホストマシンで以下コマンドで調べてください。

$ id
uid=1003(kttn) gid=1006(kttn) groups=1006(kttn),27(sudo),999(docker),2002(vglusers)


また、GCTFのsmも、ホストマシンのGPUのcompute capabilityを調べて適切なものに変更してください。(Gctfを参照)

USER_SSH_PUBKEYには、ユーザーのssh公開鍵の中身をそのままコピペします。そうすることで、ホストマシンから鍵交換でコンテナ内にsshログインできます。

Dockerイメージのビルド

Dockerfileがあるディレクトリで、Dockerイメージをビルドします。最後のピリオドを忘れない様に。

$ docker build -t <Dockerイメージにつけたい名前> .

私の場合は kttn8769/cryoem/relion:3.0.5-cuda9.2-gctf としました。

(コロンの前はリポジトリ名、コロンの後ろはタグ名と言います。リポジトリ名はスラッシュで階層化できます。タグ名を変えることで、同一のリポジトリ名に対し複数の異なるイメージを作れます。バージョン管理やバリエーションの管理に使います。)


Dockerコンテナの起動

オブジェクト指向で例えるとDockerイメージはクラスに相当し、Dockerコンテナはインスタンスに相当します。実際に起動して色々作業を行う場所はDockerコンテナになります。

今回のDockerコンテナの起動コマンド例を以下に示します。


Dockerコンテナのコマンドラインシェルを使う

Dockerコンテナにsshログインする

リモートのDockerコンテナにローカルからsshログインする