「九州工業大学 生命情報工学科 情報工学部 安永研究室」様にて公開されているDockerfileを使ってrelionが入ったdockerイメージを作る
まず計算機ですが、GPUアリの方が望ましく2枚、もしくは4枚乗っている計算機を用意する.

次に、GPUを利用できるdockerが必要なので、docker#y35c6225を参考に NVIDIA Container Toolkit を計算機に導入します.
dockerを実行ユーザは利用ユーザが望ましく、その方で docker が起動できるように /etc/group を調整します. docker#k3244237

これでほぼほぼ準備は整います.

Dockerfileを取得します

一般ユーザで NVIDIA Container Toolkit(nvidia-docker) がインストールされた計算機にログインします。
そしてDokcerfileを取得します

[illya@s ~]$ git clone https://github.com/kttn8769/cryoem-docker
 
[illya@s ~]$ cd cryoem-docker
 
[illya@s cryoem-docker]$ ls -l
total 16
-rw-rw-r-- 1 illya illya 4614 May 10 23:32 Dockerfile
-rw-rw-r-- 1 illya illya 1070 Mar 23 00:39 LICENSE
-rw-rw-r-- 1 illya illya   68 Mar 23 00:39 README.md
 
[illya@s cryoem-docker]$

「git log」とかでupdate履歴とか参照するのもいいかも

設計

取得した「Dockerfile」には調整項目があります. ユーザ名とかグループ名、UIDにGIDと「公開鍵」.
公開鍵は「~/.ssh/id_rsa.pub」とかですが、存在してなければ「ssh-keygen」コマンドで作成します.

[illya@s cryoem-docker]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/illya/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):                      <--パスフレーズは設定しなくてもいいかな.
Enter same passphrase again:
Your identification has been saved in /home/illya/.ssh/id_rsa.
Your public key has been saved in /home/illya/.ssh/id_rsa.pub.
The key fingerprint is:
 (略
[illya@s cryoem-docker]$

そしてUID/GIDを確認します

[illya@s cryoem-docker]$ id illya
uid=1000(illya) gid=1000(illya) groups=1000(illya),978(docker),3000(domain users),2002(supervisors),2005(sample)
 
[illya@s cryoem-docker]$

っと判明したので、「Dockerfile」を調整します.
「USER_SSH_PUBKEY」欄は「~/.ssh/id_rsa.pub」の中身を記載します.

diff --git a/Dockerfile b/Dockerfile
index c449e29..a522686 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,15 +3,15 @@ FROM nvidia/cuda:9.2-cudnn7-devel-centos7
 
 ### User account in Docker image
 # username
-ARG USER_NAME=""
+ARG USER_NAME="illya"
 # groupname
-ARG GROUP_NAME=""
+ARG GROUP_NAME="illya"
 # UID
-ARG USER_ID=""
+ARG USER_ID="1000"
 # GID
-ARG GROUP_ID=""
+ARG GROUP_ID="1000"
 # SSH public key
-ARG USER_SSH_PUBKEY=""
+ARG USER_SSH_PUBKEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ(略
 # Specify GID of "vglusers" group if exists, else leave this empty
 ARG VGLUSERS_GROUP_ID=""
 
@@ -50,7 +50,7 @@ RUN yum update -y && \
             vim \
             libjpeg-turbo-devel \
             mesa-libGL-devel \
-            mesa-libGLU-devel && \
+            mesa-libGLU-devel
     # Below only for Japan locale
     # localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
 # Node.js install for jupyter lab extension
@@ -77,7 +77,7 @@ RUN if [ "${VGLUSERS_GROUP_ID}" != "" ];then \
 # User configuration
 USER ${USER_NAME}
 WORKDIR /home/${USER_NAME}
-RUN mkdir .ssh && echo -e "${USER_SSH_PUBKEY}" >> .ssh/authorized_keys && \
+RUN mkdir .ssh && echo -e "${USER_SSH_PUBKEY}" >> .ssh/authorized_keys && chmod 700 .ssh && chmod 600 .ssh/authorized_keys && \
     echo "export LIBGL_ALWAYS_INDIRECT=1" >> .bashrc && \
     echo 'export PATH=/usr/lib64/openmpi/bin:$PATH' >> .bashrc && \
     echo 'export LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH' >> .bashrc

確認

「Dockerfile」を読むと、「dokcer build」で作られるイメージには relion の他に Gctf、EMAN2が用意される.
またイメージには前述のアカウントが用意され、sshでログイン可能にしている. 加えEMAN2はJupyterNotebookで扱えるようになっている.

イメージ作成

Dockerfileからイメージを作成します。同じディレクトリに「Dockerfile」があるので「.」としています。
docker build -t cryoem-docker .
「-t」は名前を付けただけです

[illya@s cryoem-docker]$ docker build -t cryoem-docker  .
 
 (しばらく掛かります. 紅茶とケーキを頂きましょう)
 
[illya@s cryoem-docker]$ docker images
REPOSITORY          TAG                        IMAGE ID            CREATED             SIZE
cryoem-docker       latest                     fc3d7af5ca0c        2 hours ago         12.4GB
nvidia/cuda         9.2-cudnn7-devel-centos7   db05dc5115cf        5 months ago        2.85GB
 
[illya@s cryoem-docker]$

これでイメージが作成できました.

留意
途中で「[Errno 28] No space left on device」と言われたらそれはイメージ作成中にコンテナのストレージ領域が圧迫したためです.
既定は10GBで、それを拡大させるには「/etc/docker/daemon.json」ファイルを下記のように別途作成して、コンテナ、イメージを一旦削除してdockerデーモンを再起動させます.

[root@s ~]# docker stop $(docker ps -q)               # すべてのコンテナを停止
[root@s ~]# docker rm $(docker ps -q -a)              # すべてのコンテナを削除
[root@s ~]# docker rmi $(docker images -q)            # すべてのイメージを削除
[root@s ~]# systemctl stop docker                     # docker デーモンを停止
[root@s ~]# rm -rf /var/lib/docker                    # コンテナの置き場所を削除
 
[root@s ~]# vi /etc/docker/daemon.json                # サイズを20Gに変更します
{
   "storage-driver": "devicemapper",
   "storage-opts": [
                      "dm.basesize=20G"
                   ]
}
[root@s ~]# systemctl daemon-reload                   # 設定ファイルを再読み込みして
[root@s ~]# systemctl start docker                    # dockerを再起動します(/var/lib/dockerが再度作られます)

*もっと適切な方法があるかもしれない

コンテナ起動

イマージは完成して、次にコンテナを起動させます.
ただその前に

  • sshとJupyterNotebookのポートアサイン
  • ホストとのディレクトリ共有

を考慮する必要があり、ここでは ホストの2222ポートがコンテナの22(ssh)に繋がり、8888がコンテナの8888に繋がるようにします。
加え ユーザのホームディレクト「/home/illya」をコンテナの /tmp/home/illya にマウントするようにします. この辺は使いやすいように...
なので

[illya@s ~]$ docker run -itd --name cryoem-docker -h cryoem-docker -p 2222:22 -p 8888:8888 -v /home/illya:/tmp/home/illya     fc3d7af5ca0c

と実行します。

コンテナに接続

sshで接続します
単純にlocalhostの2222にssh接続します。

[illya@s ~]$ ssh -p 2222 localhost -X
Last login: Mon May 11 19:53:27 2020 from gateway
 
[illya@cryoem-docker ~]$

公開鍵を登録したのでパスワードなしでログインできるかと思います。
それで

[illya@cryoem-docker ~]$ df -H
Filesystem                                   Size  Used Avail Use% Mounted on    
/dev/mapper/docker-8:4-68199551-76fa0ac5(略   22G   13G  8.9G  59% /
tmpfs                                         68M     0   68M   0% /dev          
tmpfs                                         17G     0   17G   0% /sys/fs/cgroup
shm                                           68M     0   68M   0% /dev/shm      
/dev/sda4                                     54G   43G   11G  80% /etc/hosts    
tmpfs                                         17G     0   17G   0% /proc/asound  
tmpfs                                         17G     0   17G   0% /proc/acpi    
tmpfs                                         17G     0   17G   0% /proc/scsi    
tmpfs                                         17G     0   17G   0% /sys/firmware 
[illya@cryoem-docker ~]$
[illya@cryoem-docker ~]$ relion

と利用可能になるかと.

後始末など

relionを起動して解析を進め終わったらそのままログアウト.
コンテナを削除しても構わない(docker rm <コンテナID>).

relionを更新したければ

[illya@s ~]$ ssh -p 2222 localhost -X
[illya@cryoem-docker ~]$ cd softwares/relion/build
[illya@cryoem-docker build]$ git pull
[illya@cryoem-docker build]$ make
[illya@cryoem-docker build]$ make install

で行える


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