九州工業大学 生命情報工学科 情報工学部 安永研究室様にてRelionのDockerfileが公開されている.
https://github.com/kttn8769/cryoem-docker

使ってみたRelion/Dockerfile

それをそのまま使ってもいいのだが、ここではdockerの基本から紐解いて構築してみる.

まずdocker自体はアプリケーションであって、dockerにそのインストール方法を記載している.
GPUを使うなら nvidia-docker が必要です.

ここではそのままではdockerを実行できるのはrootユーザに限定されるので、一般ユーザにも使えるように
/etc/groupの docker グループにそのユーザを追加してます.

usermod -a -G docker illya

これで一般ユーザでもdockerを操作できるようになる

Dockerでcentos7のイメージを持ってくる

まずはrelionを実行させる土台OSを用意する. ここではcentos7のイメージを土台にしてます.
「Docker Hub」には様々な環境,OSが提供されている. pullでイメージを取得します.

[illya@docker ~]$ docker pull centos:centos7
[illya@docker ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              centos7             b5b4d78bc90c        32 hours ago        203MB
 
[illya@docker ~]$

その後、イメージからコンテナを作ります.

[illya@docker ~]$ docker create -it --name relion b5b4d78bc90c

ここで作ったコンテナは即座に起動していません. 起動したコンテナを作るには「docker run -itd --name relion b5b4d78bc90c」と実行します
作ったコンテナの状況を見るには「docker ps -a」を実行します.

[illya@docker ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7d2d5c905664        b5b4d78bc90c        "/bin/bash"         9 seconds ago       Created                                 relion
[illya@docker ~]$

「STATUS」欄が「Created」なのでまだ稼働していません. 「docker ps」コマンドは稼働しているコンテナのみ表示される
なのでまずは起動させます.

[illya@docker ~]$ docker start relion
*コンテナIDを指定しても可

そして起動したコンテナに接続します

[illya@docker ~]$ docker attach relion
[root@7d2d5c905664 /]#

これで作ったコンテナを調整できます. 「docker run -itd --name relion b5b4d78bc90c」と実行すればここまでこれます. 単に段階を踏んで説明したのでこうしてます.
作業を完了後、コンテナを停止させたいのなら「exit」を実行する. 稼働させたままにするなら「Ctrl-P」「Ctrl-Q」を押下する

このコンテナを削除するには、停止させて削除します

[illya@docker ~]$ docker stop relion
[illya@docker ~]$ docker rm relion

設計

っで作ったコンテナに開発環境をインストールしてrelionをgitで取得、コンパイルすれば一応使える。
ただし、電顕画像をscpとかでコピーする必要があります. そうするとコンテナのサイズが増えます. まぁーそれでもいいのですが、
コンテナは「アプリのみ」が宜しいかと.

計算対象のデータは、コンテナの外に置いてコンテナを起動するときにデータをマウントすれば宜しいのかと.

っが、コンテナの外にあるディレクトリをマウントするにはコンテナ作成時に指定する必要がる.
留意 コンテナ作成後にマウントはできないみたい.

っでここでは

  • ホストの「/data01」をdockerコンテナ/data01に繋げる.
  • 外部からのssh接続を可能にさせる.

とします.

コンテナ内でrelionを構築する

安永研究室様のDockerfileを参考に下記を実行します

[illya@docker ~]$ docker create -it --name relion -h relion -p 2222:22 -v /data01:/data01 b5b4d78bc90c
[illya@docker ~]$ docker start relion
[illya@docker ~]$ docker attach relion
 
[root@relion ~]# df -H
Filesystem      Size  Used Avail Use% Mounted on
overlay          33G  4.6G   29G  14% /
tmpfs            68M     0   68M   0% /dev
tmpfs           8.3G     0  8.3G   0% /sys/fs/cgroup
shm              68M     0   68M   0% /dev/shm
/dev/sda3        33G  4.6G   29G  14% /data01            <--- ホストから/data01をmountしてます
tmpfs           8.3G     0  8.3G   0% /proc/acpi
tmpfs           8.3G     0  8.3G   0% /proc/scsi
tmpfs           8.3G     0  8.3G   0% /sys/firmware 
 
[root@relion /]# yum update -y
[root@relion /]# yum groupinstall "Development tools" -y
[root@relion /]# yum install -y \
            cmake \
            openmpi-devel \
            libX11-devel \
            fltk-fluid \
            fftw-devel \
            libtiff-devel \
            texlive-latex-bin \
            texlive-cm \
            texlive-dvips \
            ghostscript \
            evince \
            qpdfview \
            openssh-server \
            sudo \
            wget \
            xauth \
            vim \
            libjpeg-turbo-devel \
            mesa-libGL-devel \
            mesa-libGLU-devel
 
[root@relion /]# mkdir -p /apps/src && cd /apps/src && git clone https://github.com/3dem/relion
[root@relion src]# source /etc/profile.d/modules.sh && module load mpi
[root@relion src]# cd relion && git checkout ver3.1 && mkdir b && cd b
[root@relion b]# cmake -DCMAKE_INSTALL_PREFIX=/apps/relion .. && make && make install

これでrelionがインストールされました.
っがGUIは動きません。relionと実行すると「Can't open display:」と言われます。
dockerのX11アプリを起動するには、

  • sshで外部から入って起動する
  • Xのソケットを共有する

らが方法としてある。ここではsshで別ターミナルからコンテナへアクセスしてみる

コンテナに「openssh-server」はインストールされているが、起動はしていない。
まずはsshdの設定ファイルを調整します。コンテナであるためか「X11Forwarding yes」だけではなく「X11UseLocalhost no」と設定する必要があるみたい.
この修正を行った後で起動すると

[root@relion ~]# /usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
[root@relion ~]#

と言われる。これはどうもこのコンテナのsshキーがないためみたい.

[root@relion ~]# ls -l /etc/ssh/
total 580
-rw-r--r--. 1 root root 581843 Aug  9  2019 moduli
-rw-r--r--. 1 root root   2276 Aug  9  2019 ssh_config
-rw-------. 1 root root   3907 Aug  9  2019 sshd_config
[root@relion ~]#

っと、確かにない。
なので作成します。

[root@relion ~]# /usr/sbin/sshd-keygen
Generating SSH2 RSA host key:                              [  OK  ]
Generating SSH2 ECDSA host key:                            [  OK  ]
Generating SSH2 ED25519 host key:                          [  OK  ]
[root@relion ~]#
[root@relion ~]# ls -l /etc/ssh/
total 604
-rw-r--r--. 1 root root     581843 Aug  9  2019 moduli
-rw-r--r--. 1 root root       2276 Aug  9  2019 ssh_config
-rw-r-----. 1 root ssh_keys    227 May  9 03:14 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 May  9 03:14 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 May  9 03:14 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 May  9 03:14 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1679 May  9 03:14 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 May  9 03:14 ssh_host_rsa_key.pub
-rw-------. 1 root root       3907 Aug  9  2019 sshd_config
[root@relion ~]#

これで「/usr/sbin/sshd」を実行します. *「systemctl start sshd」ではありません
これで外部からアクセス可能になるのですが、アカウントがない.
コンテナのrootアカウントをそのまま使うには、最低でもrootのパスワードを設定する必要があります.
そして重要なのですが、rootアカウントで行うと、コンテナ内で/data01にファイルを作ると、そのファイルはroot所有者になります.

なのでコンテナ内に自分のアカウントを作りましょう.

作り方はuseraddで行います。注意点としては最低限「アカウント名」と「UID」は揃えましょう

[root@relion ~]# useradd -m -d /home/illya -u 1000 illya
[root@relion ~]# passwd illya

これでコンテナ内にアカウントが出来ました。加えてパスワードも設定しました。
これで他の端末からコンテナにsshでログインしてみます。

[illya@docker ~]$ ssh -l illya -p 2222 docker -X
illya@docker's password:
 
[illya@relion ~]$

とログインできました。「-p」はポート番号です
この後、/data01とかに移って relion を起動します。

[illya@relion ~]$ /apps/relion/bin/relion

*当然/data01にユーザのアクセス権を付与してください。またコンテナ内のパス環境は.bashrcらで修正してください。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-05-09 (土) 12:45:46 (20d)