用集成了anaconda的docker快速布置生信分析平台
前言
众所周知,conda
和docker
是进行快速软件安装、平台布置的两大神器,通过它们,在终端前敲几个命令、点点鼠标,软件就装好了。出了问题也不会影响到系统配置,能够很轻松的还原和重建。
不过,虽说类似rstudio
或者jupyter notebook/lab
这样的分析平台能够很快地找到别人已经做好的镜像,但是总归有功能缺失,而且有时要让不同的镜像协同工作时,目录的映射,权限的设置会让经验的人犯晕。
本着不折腾不舒服的本人一惯风格,我自己写了一个dockerfile,集成了rstudio server
、jupyter lab
、shiny server
,可用于生信分析平台的快速布置,通过一些技巧,也可供linux初学者练习用
我的dockerfile地址
https://github.com/leoatchina/dockerfile_jupyter,觉得好给个star吧!
(PS: 小编我已经迫不及待的给出了第一个赞!)
安装,要先装好docker-ce
和git
git clone https://github.com/leoatchina/dockerfile_jupyter.git
cd docker_jupyter
docker build -t jupyter .
说明,这个镜像的名字是jupyter
,你们可以改成其他自己喜欢的任何名字
我在这个dockerfile里主要做的工作
基于ubuntu16.04
安装了一堆编译、编辑、下载、搜索等用到的工具和库
安装了最新版
anaconda
,Rstudo
,Shinny
安装了部分
bioconductor
工具用
supervisor
启动后台web服务集成
zsh
以及oh-my-zsh
,vim8
,git
主要控制点
开放端口:
8888: for jupyter lab
7777: for jupyter notebook
8787: for rstudio server
3838: for shiny
访问密码:
见dockerfile里的
ENV PASSWD=jupyter
运行时可以修改
jupyter的主目录:
/jupyter
rstudio的主目录:
/home/rserver
shinny的主目录:
/home/rserver/shiny-server
VOLUME ["/home/rserver","/jupyter","/mnt","/disks","/oss","/data"]
运行
使用docker-compose
docker-compose -f /home/docker/compose/bioinfo/docker-compose.yml up -d
docker-compose.yml
的内容,详细内容如下
version: "3" # vml版本
services:
jupyter:
image: jupyter # 使用前面做出来的jupyter镜像
environment:
- PASSWD=mitipass # PASSWD , 在Docker-file里的 `ENV PASSWD=jupyter`
ports: # 端口映射,右边是container里的端口,左边是实际端口,比如我就喜欢实际端口在内部端口前加2或1。
- 28787:8787
- 27777:7777
- 28888:8888
- 23838:3838
volumes: # 位置映射,右docker内部,左实际
- /data/bioinfo:/mnt/bioinfo # 个人习惯,里面会放一些参考基因组等
- /home/github:/mnt/github # 习惯2,比如我的vim配置会放里面
- /tmp:/tmp
- /data/disks:/disks
- /data/work:/work
- /home/root/.ssh:/root/.ssh # 这个是为了一次通过ssh-keygen生成密钥后,能多次使用
- /home/root/.vim:/root/.vim # 为了不同的container能重复利用一套已经下载的vim插件
- /root/.vimrc.local:/root/.vimrc.local # 同上
- /home/jupyter:/jupyter # 关键目录之1,jupyter的主运行目录
- /home/rserver:/home/rserver # 关键目录之2,rtudio的工作目录
会运行一个名为bioinfo_jupyter_1
的container
,是由目录bioinfo
+镜像jupyter
+数字1
组成
使用docker run命令
和docker-compose差不多的意义
docker run --name jupyter \
-v /data/bioinfo:/mnt/bioinfo \
-v /home/github:/mnt/github \
-v /tmp:/tmp \
-v /data/disks:/disks \
-v /data/work:/work \
-v /home/root/.ssh:/root/.ssh \
-v /home/root/.vim:/root/.vim \
-v /home/jupyter:/jupyter \
-v /home/rserver:/home/rserver \
-p 27777:7777 \
-p 28787:8787 \
-p 28888:8888 \
-p 23838:3838 \
-e PASSWD=mitipass \
-d jupyter #使用jupyter镜像, -d代表在后台工作
运行后的调整
打开
运行机器的IP:28787
,修改下R的源,bioClite源可能要运行下
R CMD javareconf
shinny的运行目录是在
/home/rsever/shinny-server
进入
rstudio-server
的用户名是rserver
.bashrc
和.zshrc
,我玩的小花招
众所周知,bash/zsh在启动时,会加载用户目录下的.bashrc|.zshrc
进行一些系统变量的设置,同时又可以通过source
命令加载指定的配置,在我的做出来的jupyter
镜像中,为了达到安装的软件和container分离
,在删除container时不删除安装的软件的目的,我做了如下source次序
root目录下的
.bashrc
或者.zshrc
(在镜像里已经写入) :source /juoyter/.jupyterc
在映射过去的
/jupyter/.jupyterc中
(另外自行建立):source /jupyter/.bioinforc
贴出我的
.jupyterc
和.bioinforc
/jupyter/.jupyterc
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#PATH I write or complied
export PATH=/jupyter/usr/bin:$PATH #bioinfo path
if [ -f /jupyter/.bioinforc ]; then
source /jupyter/.bioinforc # 重要
fi
#PATH for conda
export PATH=/opt/anaconda3/bin:$PATH
# /opt/anaconda3/是安装的anaconda目录,放最重要的位置上去
/jupyter/.bioinforc
#PATH for conda installed envs
export PATH=$PATH:/jupyter/envs/entrez-direct/bin
export PATH=$PATH:/jupyter/envs/bioinfo/bin
#ascp
export PATH=/jupyter/biotools/.aspera/connect/bin:$PATH
alias ascp_putty='ascp -i /jupyter/biotools/.aspera/connect/etc/asperaweb_id_dsa.putty --mode=recv -l 200m '
alias ascp_ssh='ascp -i /jupyter/biotools/.aspera/connect/etc/asperaweb_id_dsa.openssh --mode=recv -l 200m '
alias fd="fastq-dump --split-3 --defline-qual '+' --defline-seq '@\$ac-\$si/\$ri'"
#PATH for biotools
export PATH=/jupyter/biotools/vcftools/bin:$PATH
export PERL5LIB=$PERL5LIB:/jupyter/biotools/vcftools/share/perl/5.22.1
export PATH=/jupyter/biotools/sratoolkit.2.5.6-ubuntu64/bin:$PATH
export PATH=/jupyter/biotools/gdc-client/bin:$PATH
export PATH=/jupyter/biotools/RSEM-1.3.0:$PATH
export PATH=/jupyter/biotools/express-1.5.1-linux_x86_64:$PATH
你们可以看到,
/opt/anaconda3/bin
在$PATH变量中优先级最高,而安装在/jupyter/envs/bioinfo/bin
,/jupyter/envs/entrez-direct/bin
等目录下的可执行文件不需要输入全路径也运行,这是搞哪一出?
conda install -p 快速安装软件
各位在学习其他conda教程时,经常会学到conda create -n XXX
新建一个运行环境以满足特定安装需求,还可以通过source activate
激活这个环境,但其实还有一个参数-p
用于指定安装目录。
利用了这一点,我们就可以把自己docker
里conda
安装软件到非conda内部目录
,而是实际的硬盘
上。
举例如下安装conda install -p /jupyter/envs/bioinfo trimmomatc
如此,就安装到对应的位置,如samtools,bcftools,varscan等一众生信软件都可以如此安装。
关键的,在安装这些软件相应container
被删除后,这些通过-p
安装上的软件不会随着删除,下次重做container
只要目录映射一致,不需要重装,不需要重装,不需要重装。
有用的时刻?
启动分析流程后,发现代码写错了要强行结束时,只要删除
container
,不需要一个个去kill进程在另一个机器上快速搭建分析环境,把
docker-file
在新机器上bulid
下,各个.xxxrc
文件放到正确的位置,然后把已经装上的软件复制过去就能搭建好分析环境。
网页端的shell
本docker中集成的jupyter lab的功能不用太多介绍,我要介绍的是集成的zsh环境,通过file->new->terminal
输入zsh
,就会打开一个有高亮的 shell环境
有两个好处
只要你记得你的访问密码PASSWORD(仔细看我的启动脚本),IP、端口,就可以通过网页端进行操作。
启动
perl
,python
,shell
的分析流程后,可以直接关闭网页,不需要用nohup
启动,下次重新打开该页面还是在继续运行你的脚本 。这个,请各位写个分析流程,自行体会下,也是我认为本次教程的最大亮点。
编辑:jimmy