一步到位-把生信分析装在“盒子”里

引言

每一个做生信的人在安装新软件之前都曾有过期待,这个软件要一次性安装好,可现实往往是残酷的...可见有一个良好的分析环境,对我们的研究效率是有多么的高!

配置环境的“老大难”

经过之前流程构建的介绍,估计有的小伙伴们准备磨刀霍霍了。且慢!有过流程分析的小伙伴可能有经验,在别人机器下运行地好好的流程,却在自己的机器上始终运行不起来,明明软件都安装好了咋就运行不起来(掀桌子!),但又受限于对计算机系统的复杂性,遇到了此类问题时,只能听天命了,真是令人捉狂!去问开发者,开发者常常会说:“它可以在我的机器上跑了”,也就是说可能换个环境,流程就认生跑不动了。这就说明生物信息学分析所用到的软件对环境需求都是不一样的。

那有没有办法来解决这个问题呢?答案是肯定的。聪明的研究者们想到,如果把这些软件和依赖放到一个干净统一的环境下,你和我运行流程时的环境配置都是一模一样的,于是上面遇到的问题就解决了。带着这样的需求,虚拟环境的概念出现了,如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的一些缺点

作为一个不断发展的工具,自然会有一些缺点:

权限要求:Docker的运行需要ROOT权限,或者添加docker用户,但对于在集群或者云平台上的用户来说,由于权限的限制只能通过conda等工具完成分析软件部署,这就导致了很大一部分用户很难拥抱这个好用的工具;

宿主配置:只能在64位的系统上运行,32位无法正常运行,且只能虚拟基于linux的服务,windows的服务目前不支持;

安全性:Docker设计上一定程度地保护了docker容器的安全,但是宿主机能够对docker内部的文件可以毫无障碍地读取和删除,一旦有了宿主机的权限就掌握了对上面docker容器的生杀大权。

Docker的几个重要概念

镜像(Image):跟安装操作系统使用的系统镜像(iso)一样,Docker 镜像也相当于一个小而完整的操作系统如Ubuntu 18.04。每个镜像有自己唯一的ID,名字和标签,还包含一些运行时准备的一些配置参数(如环境变量、软件等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器(Containers): 是一种超轻量级的虚拟机,在里面可以安装、运行程序,还可以把安装好的程序存储起来获得新的镜像。

仓库(Registry):镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,就如同存储镜像的数据库一样,Docker Registry 就是这样的服务。

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进行生物信息学应用、软件的发布将成为共识。同时也由于生信生态的普及,越来越多的研究人员加入这个大家庭中,怎么使得软件更方(傻)便(瓜)走进研究人员的日常,这应该是我们做生信的小伙伴要关注的点!

它,

不仅仅是一个码,

还是知识!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191115A02Y0C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券