众所周知,conda
和docker
是进行快速软件安装、平台布置的两大神器,通过它们,在终端前敲几个命令、点点鼠标,软件就装好了。出了问题也不会影响到系统配置,能够很轻松的还原和重建。
不过,虽说类似rstudio
或者jupyter notebook/lab
这样的分析平台能够很快地找到别人已经做好的镜像,但是总归有功能缺失,而且有时要让不同的镜像协同工作时,目录的映射,权限的设置会让经验的人犯晕。
本着不折腾不舒服的本人一惯风格,我自己写了一个dockerfile,集成了rstudio server
、jupyter lab
,可用于生信分析平台的快速布置,也可供linux初学者练习用。
https://github.com/leoatchina/jupyterlab_rstudio 觉得好给个star吧!
docker pull leoatchina/jupyterlab_rstudio
要先装好docker-ce
和git
git clone https://github.com/leoatchina/jupyterlab_rstudio.git
cd jupyterlab_rstudio
docker build -t leoatchina/jupyterlab_rstudio .
- 基于ubuntu16.04
- 安装了一堆编译、编辑、下载、搜索等用到的工具和库
- 安装了最新版
anaconda
,Rstudio
- 安装了部分
bioconductor
工具 - 用
supervisor
启动后台web服务 - 一点点美化工作
- 在衍生版本中,集成texlive
- 开放端口:
- 8888: for jupyter lab
- 8787: for rstudio server
- 访问密码:
- 见dockerfile里的
ENV PASSWD=jupyter
- 运行时可以修改成你自己喜欢的密码
- 见dockerfile里的
- 主目录:
- jupyter:
/jupyter
- rstudio:
/home/rserver
- jupyter:
docker-compose -f /home/docker/compose/bioinfo/docker-compose.yml up -d
docker-compose.yml
的详细内容如下
version: "3" # xml版本
services:
jupyter:
image: leoatchina/jupyterlab_rstudio # 使用前面做出来的jupyter镜像
environment:
- PASSWD=password # PASSWD , 在Docker-file里的 `ENV PASSWD=jupyter`
ports: # 端口映射,右边是container里的端口,左边是实际端口,比如我就喜欢实际端口在内部端口前加2或1。
- 28787:8787
- 27777:7777
- 28888:8888
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插件
- /home/jupyter:/jupyter # 关键目录之1,jupyter的主运行目录
- /home/rserver:/home/rserver # 关键目录之2,rtudio的工作目录
会运行一个名为bioinfo_jupyter_1
的container
,是由目录bioinfo
+镜像jupyter
+数字1
组成
和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 \
-e PASSWD=password \
-d leoatchina/jupyterlab_rstudio #使用jupyter镜像, -d代表在后台工作
- 如上,通过
IP:[27777|28888|28787]
进行访问 - 打开
运行机器的IP:28787
,修改下R的源,bioClite源 - 进入
rstudio-server
的用户名是rserver
- 请打开
pkgs.R
和conda.sh
,我收集了一些R包和conda生信软件的安装脚本
本docker中集成的jupyter lab
,rstudio
的功能不用太多介绍,我要介绍的是集成的bash环境,通过file->new->terminal
输入bash
,就会打开一个有高亮的 shell环境
有两个好处
- 只要你记得你的访问密码PASSWORD(仔细看我的启动脚本),IP、端口,就可以通过网页端进行操作。
- 启动
perl
,python
,shell
的分析流程后,可以直接关闭网页,不需要用nohup
启动,下次重新打开该页面还是在继续运行你的脚本 。这个,请各位写个分析流程,自行体会下,也是我认为本次教程的最大亮点。
众所周知,bash在启动时,会加载用户目录下的.bashrc
进行一些系统变量的设置,同时又可以通过source
命令加载指定的配置,在我的做出来的jupyter
镜像中,为了达到安装的生信软件
和container分离
的目的,在删除container时不删除安装的软件的目的,我设置如下source次序
- root目录下的
.bashrc
(集成在镜像里) :source /juoyter/.jupyterc
(自己建立) - 在
/jupyter/.jupyterc中
(注意这个没集成) :source /jupyter/.bioinforc
/jupyter/.jupyterc
export PATH=$PATH:/mnt/bioinfo/bin
export PATH=$PATH:/mnt/bioinfo/annovar
export PATH=$PATH:/mnt/bioinfo/firehose
export PATH=$PATH:/mnt/bioinfo/gatk4
各位在学习其他conda教程时,经常会学到conda create -n XXX
新建一个运行环境以满足特定安装需求,还可以通过source activate
激活这个环境。
但其实还有一个参数-p
用于指定安装目录,利用了这一点,我们就可以把自己docker
里conda
安装软件到非conda内部目录
,而是映射过来的目录
。
conda install -p /mnt/bioinfo -c bioconda roary
如此,就安装到对应的位置,如samtools,bcftools,varscan等一众生信软件都可以如此安装。
关键的,在安装这些软件相应container
被删除后,这些通过-p
安装上的软件不会随着删除,下次重做container
只要目录映射一致,不需要重装软件,不需要重装软件,不需要重装软件。
- 启动分析流程后,发现代码写错了要强行结束时,只要删除
container
,不需要一个个去kill进程 - 在另一个机器上快速搭建分析环境,把
docker-file
在新机器上bulid
下,各个.xxxrc
文件放到正确的位置,然后把已经装上的软件复制过去就能搭建好分析环境。