每一个做生信的人在安装新软件之前都曾有过期待,这个软件要一次性安装好,可现实往往是残酷的...可见有一个良好的分析环境,对我们的研究效率是有多么的高!
配置环境的“老大难”
经过之前流程构建的介绍,估计有的小伙伴们准备磨刀霍霍了。且慢!有过流程分析的小伙伴可能有经验,在别人机器下运行地好好的流程,却在自己的机器上始终运行不起来,明明软件都安装好了咋就运行不起来(掀桌子!),但又受限于对计算机系统的复杂性,遇到了此类问题时,只能听天命了,真是令人捉狂!去问开发者,开发者常常会说:“它可以在我的机器上跑了”,也就是说可能换个环境,流程就认生跑不动了。这就说明生物信息学分析所用到的软件对环境需求都是不一样的。
那有没有办法来解决这个问题呢?答案是肯定的。聪明的研究者们想到,如果把这些软件和依赖放到一个干净统一的环境下,你和我运行流程时的环境配置都是一模一样的,于是上面遇到的问题就解决了。带着这样的需求,虚拟环境的概念出现了,如virtualenv和conda,两者之间的不同是,virtualenv是Python的环境管理器,而conda不仅是包和环境管理器,还不仅限于Python还支持R、Perl等,扩大了conda的使用范围。
看似版本依赖问题解决了,但爱想问题、爱折腾你可能时不时会冒出这样的想法:一个linux环境下的流程,我要怎么在windows下面运行呢?不能让我再安个linux系统吧,那可太麻烦了!Bingo!你想的问题,也正是别人也会想到的问题。这里就要介绍我们今天要讲的主角Docker了。
Docker是什么?
根据Docker文档中的定义:将软件打包成标准化单位,用于开发,装运和部署。
Package Software into Standardized Units for Development, Shipment and Deployment.
很多人看了这个概念跟没看一样,根本不知道说的是什么。其实简单来讲,我们把关注点放到后面的装运和部署。想要装运,那么就得要一个容器去装载里面的货物;想要部署,容器就要有一个良好设施去存放货物,比如linux环境。如此,Docker就是一个有着良好环境可以存放货物的环境,且这个环境不受外界因素的干扰,独立却功能俱全,就相当于把你分析所需要的所有软件都装在“盒子”里面,且没有依赖冲突。所以你将Docker看做是一个轻量级的操作系统也是可以的。
Docker能干什么?
由于Docker可以将程序和与该程序的依赖,打包放在一个文件存储系统里面。运行这个文件存储系统时,就会生成一个虚拟的容器,这个容器里面有着独立的数据库、软件运行环境、独立的服务器进程,程序在这个虚拟容器里面运行,就像在一个真实的机器上运行一样。有了Docker,就不必再担心环境问题了。
上面只是简单介绍了一下Docker的使用场景,其主要优点有:
Docker的一些缺点
作为一个不断发展的工具,自然会有一些缺点:
Docker的几个重要概念
Docker与生物信息学
巴拉巴拉说了这么多,那Docker怎么用到生物信息学上面来呢?有比较基因组分析经历的同学可能用到过circos,因其是完全依赖于Perl的软件,在安装相关依赖的时候显得尤其麻烦。经常会显示“Can't locate ***/***.pm in @INC (@INC contains: /path/to/circos-0.55/bin/lib /path/to/circos-0.55/bin/../lib)”等错误,还会因为各种没有权限而苦恼。有了Docker你就不用怕啦,只需运行“docker pull alexcoppe/circos”,然后circos就安装好啦,没错,一条命令就搞定了;只需一步,circos安装抱回家!如下图:
可能有的小伙伴就会犯嘀咕,“这不和conda干的是同一件事吗?”确实,在很多时候Docker能干的事,conda就能完成。但是,Docker是更接近操作系统的工具,conda能同时在一个环境里面安装Python2和Python3吗?Docker就能,而且在Docker容器中也能安装conda哟!一键搞定环境依赖,那种解脱的感觉,只有发文章的时候才能感受到吧!
结束语
好了,关于Docker的基本知识就说到这,以后我们再接着讲具体的使用方法。因为Docker有着良好可移植性,保证了分析结果可重复性,提高结论可行度,我相信在不久的将来,使用Docker进行生物信息学应用、软件的发布将成为共识。同时也由于生信生态的普及,越来越多的研究人员加入这个大家庭中,怎么使得软件更方(傻)便(瓜)走进研究人员的日常,这应该是我们做生信的小伙伴要关注的点!