Docker,使生信分析更简单、可重复
【摘要】 本文向生信领域的人推荐了Docker容器技术,它使得生物基因领域的生信处理流程跟简单,过程可以很容易的重复。有助于减轻负担,加速生命探索。先抛一个主题:每一个跑生信分析的人都应该知道Docker技术。然后我再来介绍什么是Docker,以及为什么我们应该了解Docker。首先,从事基因分析的研究者,起码有80%的人之前是没有接受过计算机科学培训的。很多人都是开始执行具体分析业务...
【摘要】 本文向生信领域的人推荐了Docker容器技术,它使得生物基因领域的生信处理流程跟简单,过程可以很容易的重复。有助于减轻负担,加速生命探索。
先抛一个主题:每一个跑生信分析的人都应该知道Docker技术。然后我再来介绍什么是Docker,以及为什么我们应该了解Docker。
首先,从事基因分析的研究者,起码有80%的人之前是没有接受过计算机科学培训的。很多人都是开始执行具体分析业务的时候才是开始接触这些计算机生信软件。其次,现在有大量的论文阐述从各种基因组数据中得到了很酷的生物学结果,所以要求研究人员必须拥有足够的技能来执行论文中的各种生物信息处理流程。
如果您已经学习过或正在学习生物信息学,那你应该知道这货的第一个挑战不是理解一个软件怎么使用,而在于如何安装那个神奇的软件及其它那永无止境的依赖。也许你说你使用的是HPC环境,这样群集管理员会都帮你安装好了,但你仍然需要在个人或实验室计算机中安装一些东西。
操作多了以后,你会发现:当你安装某些东西的时候,是有可能会弄乱别的东西的。比如你把Linux系统搞挂了好几天了,不得不重新安装你的操作系统。然而,这意味着你要再一次安装之前那个神奇的软件,当初你为了安装它已经搞的死去活来的。但是这样还不够,因为就在昨天,他们发布了你刚刚安装好的那个软件的新版本。你想要升级,但是你很害怕,新版本会不会有新的坑啊:
所有这些问题的解决方案,都可以靠一条漂亮的蓝色鲸鱼搞定,它叫Docker:
Docker是一个开源(耶!)引擎,可以自动将应用程序部署到容器中,这样您就可以在这样的容器中安装所需的软件,以及运行它所需要的所有依赖:文件系统,代码,系统工具等。它通过内核的轻量级虚拟化技术来实现这一点,这意味着它类似于VirtualBox,但它运行在操作系统的内核之上,而不是需要虚拟化层。这是一个令人难以置信的轻量,快速和高效的环境,它可以方便的运行你的代码,这也是为什么Docker技术迅速火遍全球的原因。
Docker给生信分析带来了诸多便捷。第一:你可以在任何操作系统(Mac,Linux或Windows)中安装和运行特定的生物信息学软件。并且这个软件的安装独立于其他任何东西,包括主机操作系统,这意味着你可以做任何sudo你想要的,且不会破坏你的电脑(万岁!)。第二:你可以为你那已经调试完美,可重复执行的流程添加一些额外的处理步骤。整个过程还是可以很方便的重现出来。
是不是感觉超级方便?这里有一个在线玩Docker的教程,有兴趣的赶紧动手试试:https://labs.play-with-docker.com
这里来一个实战演练,假设您安装了docker,这是从终端下载并运行最新版本的Ubuntu的方法:
首先pull是来自DockerHub(全球最大的Docker镜像仓库)的Ubuntu镜像。
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
5a132a7e7af1: Pull complete
fd2731e4c50c: Pull complete
28a2f68d1120: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:4e85ebe01d056b43955250bbac22bdb8734271122e3c78d21e55ee235fc6802d
Status: Downloaded newer image for ubuntu:latest
Docker默认获取最新镜像版本,但我们也可以指定我们想要的那个,例如: docker pull ubuntu:14.04。
然后我们run从该镜像启动一个容器:
$ docker run -it ubuntu /bin/bash
root@4ff0be4995f0:/#
root@4ff0be4995f0:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@4ff0be4995f0:/# echo "Hello world!"
Hello world!
就这么简单,root@4ff0be4995f0:/#意味着我们在Ubuntu容器里面了,并且我们是root用户,我们可以在Ubuntu终端做任何事情。在这个例子中简单的执行了ls命令,以及经典的echo "Hello world"。我们可以安装我们想要的所有软件,用它来装载转录组或其他任何东西,退出并再次回到它。我们还可以访问容器外部的数据(需要在运行容器时挂载卷,跟VM上类似)。
使用两行命令就启动并运行最新版本的Ubuntu了,很方便,对吧?还有助攻呢,通过下面这两个项目,大多数的生物学软件也可以这样方便的获取:
§ Biodocker
§ Bioboxes
他们提供了常用的生物信息学的软件的dockerfiles。一个dockerfile文件可以自动打包生成特定版本的Docker镜像。因此,如果您想安装Bowtie 1.1.2,您只需从biodocker仓库中拉取镜像就行:
$ docker pull biodckrdev/bowtie:1.1.2
1.1.2: Pulling from biodckrdev/bowtie
bunch of output not worth sharing
Status: Downloaded newer image for biodckrdev/bowtie:1.1.2
然后我们就可以使用Docker将这个软件以容器的方式跑起来了:
$ docker run biodckrdev/bowtie:1.1.2 bowtie
No index, query, or output file specified!
Usage:
bowtie [options]* <ebwt> {-1 <m1> -2 <m2> | --12 <r> | <s>} [<hit>]
<m1> Comma-separated list of files containing upstream mates (or the
sequences themselves, if -c is set) paired with mates in <m2>
<m2> Comma-separated list of files containing downstream mates (or the
sequences themselves if -c is set) paired with mates in <m1>
<r> Comma-separated list of files containing Crossbow-style reads. Can be
a mixture of paired and unpaired. Specify "-" for stdin.
<s> Comma-separated list of files containing unpaired reads, or the
sequences themselves, if -c is set. Specify "-" for stdin.
<hit> File to write hits to (default: stdout)
...
如果你点击上面的镜像链接,也许你会说这个Biodocker和Bioboxes默认提供的镜像里面,缺少你想要用的几个程序。不用担心,我们可以调整Dockerfiles来快速获得我们想要的Docker镜像。通过Dockerfile来编译Docker镜像非常容易。
Docker生态还有比我在这里介绍的要多得多。比如,你还可以使用Kubernetes构建庞大的Docker容器集群。Docker已然是计算机科学家和开发人员的热门话题之一。它虽然刚刚开始被生物学领域使用,但它具有巨大的潜力。我想我们很快就会看到越来越多的Docker,因为它已经很自然的成为了未来的趋势:它可以让我们的工作更轻松,并且使得我们的生物信息学分析更具可重复性。
原文如下,我做了一些翻译+补充:
更多推荐
所有评论(0)