可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。最近发现一篇关于这方面很好的教程。改教程主要分三个方面:Docker的介绍,Conda的介绍还有Workflowr的教程。通过使用这几个不同的工具实现上面提到的要素,进而进行可重复的生信分析。今天先讲第一部分 Docker的介绍。
什么是Docker?Docker是一个使用OS级虚拟化的平台,在被称为Containers的环境中运行软件,这些程序container是完全隔离的环境。它们可以拥有自己的进程或服务或网络接口,就像单独虚拟机(VM)一样。但它们与VM又有所不同,它们“共享”了OS内核。Docker的镜象是静态(固定)的模板,而containers是动态的镜像。
为什么要用Containers?Containers能更简单的传导(对开发人员有用)和更简单地在本地系统上使用不同的工具(对用户有用)。Containers封装了软件组件及其相应的依赖项,因此你只需下载对应的镜像就相当于安装了软件,然后在支持Docker的任何系统上运行它。BioContainers项目已将许多生物信息学工具包装在一起。他们在Docker Hub上有1000多个存储库,其中包含各种生物信息工具的Docker镜像。
关于Docker的基础首先下载Docker,到下面的网站下载好对应版本的docker,然后进行安装。我的电脑是mac系统的,后面的操作都基于mac系统的docker。
https://www.docker.com/products/docker-desktop下载安装好后,简单查看一下其对应的版本:
docker -- version Docker version 19.03 . 5 , build 633a0ea接着执行强制性的步骤,去检查安装是否正确。如果你的docker被正确安装,它会在你terminal里输出下面的内容:
docker run hello - world This message shows that your installation appears to be working correctly . To generate this message , Docker took the following steps : 1. The Docker client contacted the Docker daemon . 2. The Docker daemon pulled the "hello-world" image from the Docker Hub . ( amd64 ) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading . 4. The Docker daemon streamed that output to the Docker client , which sent it to your terminal . To try something more ambitious , you can run an Ubuntu container with : $ docker run - it ubuntu bash Share images , automate workflows , and more with a free Docker ID : https : //hub.docker.com/ For more examples and ideas , visit : https : //docs.docker.com/get-started/ 下载我们第一个docker镜像准备工作结束后,开始使用 docker pull下载我们的第一个docker镜像。下面会下载一个名为 BusyBox的镜像,这个镜像包含了许多常见的UNIX的程序
docker pull busybox下载后,我们可以通过 docker images命令查看在你的计算器上所有可用的docker镜像:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest b534869c81f0 17 hours ago 1.22MB 运行Docker容器使用 docker run使用docker的镜像,来启动新的docker容器。docker镜像是在运行使用到的文件系统和参数。docker容器可以看作是镜像中一个正在运行的例子。
docker run -it --rm busybox参数 -i指定你要交互式运行docker容器。参数 -t指定在启动容器时要运行伪终端。--rm参数指定在退出时自动删除容器。
如果你有不想要的镜像,可以通过下面的命令进行删除:
docker rmi busybox # busybox should now be gone docker images 共享文件 共享文件Docker容器(通常)不会包含你要分析的数据。你需要指定哪个volumes需要链接在一起。
这里先下载安装好Conda的:
docker pull continuumio/miniconda3接着使用以下命令将容器外部的数据链接到容器里:
docker run -it --rm -v /tmp/:/data continuumio/miniconda3/tmp/是本地文件系统上数据目录的文件路径。/data是容器中链接数据的文件夹的文件路径。/data文件夹中的任何数据都将被本地文件系统中的数据替换。-v选项指定你本地需要替换到容器里的路径。对容器中数据所做的任何更改,都会同步到本地文件的数据中。
这里可以看到,咱们在容器里创建的 data/hello.txt,同样可以在本地路径 /tmp/中找到。
(base) root@f5ef791f90c7:/# echo "Hello from the otherside" > data/hello.txt # exit container exit ls -al /tmp/hello.txt -rw-r--r-- 1 ricky wheel 25 17 Mar 16:35 /tmp/hello.txt cat /tmp/hello.txt Hello from the otherside RStudio服务器的构建下面我们尝试使用docker来构建一个R的环境,这里需要下载R studio的镜像:
docker pull davetang/rstudio_biocasia成功下载安装镜像后,请尝试运行以下命令。下面的输出表明,该镜像正在使用Debian操作系统。
docker run --rm -it davetang/rstudio_biocasia cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" VERSION_CODENAME=stretch ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" 从Docker运行RStudio服务器在浏览器中启动容器:
docker run --rm -p 8888:8787 -e PASSWORD=password davetang/rstudio_biocasia如果一切顺利,则可以通过你喜欢的Web浏览器访问 http:// localhost:8888 /上的RStudio服务器。用户名为 rstudio,密码为 password。选项 “-p”是端口, “-e”是环境变量;默认情况下,RStudio服务器使用端口8787,因为我已将此端口映射到本地计算机上的端口8888。如果使用不同的端口,则可以运行RStudio服务器的多个容器。
这时候可以打开一个新的终端,使用 ps来查看哪些容器正在运行。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6a3f94f7886 davetang/rstudio_biocasia "/init" 20 seconds ago Up 19 seconds 0.0.0.0:8888->8787/tcp vigilant_sinouss 为你的项目创建Docker镜像docker镜像是基于Dockerfile中包含的命令构建的。例如,下面是用来创建d avetang/rstudio_biocasia镜像的Dockerfile 。
FROM rocker/rstudio:3.6.1 MAINTAINER Dave Tang <me@davetang.org> RUN apt-get clean all && apt-get update && apt-get upgrade -y && apt-get install -y libhdf5-dev libcurl4-gnutls-dev libssl-dev libxml2-dev libpng-dev zlib1g-dev && apt-get clean all && apt-get purge && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN Rscript -e "install.packages(c('rmarkdown', 'tidyverse', 'workflowr'));" # COPY user-settings /home/rstudio/.rstudio/monitored/user-settings/user-settings # COPY .Rprofile /home/rstudio/该Dockerfile使用镜像 rocker/rstudio:3.6.1作为基础并安装一些常用的库。添加了将在其它研讨会中使用的其他R软件包。另外还可以使用COPY(尽管已注释掉)将本地计算机中的数据复制到Docker镜像中的文件夹中。该数据将永久包含在Docker镜像中,如果数据很大,则会带来不便,因为生成的Docker镜像将需要更多的磁盘空间。
Dockerfile中的每个 RUN,COPY和ADD命令都会在容器中生成另一个层,从而增加其大小。我们应该始终使用多行命令并清理程序包管理器缓存,以最大程度地减少最终生成镜像的大小。
Dockerfile用于在带有Dockerfile的文件夹中使用以下命令构建镜像:
docker build -t davetang/rstudio .成功创建Docker镜像后,可以将其推送到Docker Hub,以便其他人可以使用它。首先,使用你的DockerHub用户名和密码登录。
docker login然后将镜像推送到Docker Hub。
docker push davetang/rstudio 使用docker做生信分析的例子下载测试数据,https://github.com/davetang/learningvcffile/blob/master/aln_consensus.bcf,并将下载好的数据移动到你需要挂在的路径中:
# 下载镜像 docker pull biocontainers/bcftools:v1.9-1-deb_cv1 # 挂载数据 docker run -it --rm -v /Users/hhu/dowload:/data biocontainers/bcftools:v1.9-1-deb_cv1 # 执行分析 bcftools view -v snps aln_consensus.bcf | grep -v "^#" | head -2 1000000 336 . A G 221.999 . DP=112;VDB=0.756462;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,102,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,0 1000000 378 . T C 221.999 . DP=101;VDB=0.704379;SGB=-0.693147;MQ0F=0;AF1=1;AC1=2;DP4=0,0,99,0;MQ=60;FQ=-281.989 GT:PL 1/1:255,255,本次Docker的分享就到这里结束了,下一次的内容会介绍Conda在可重复的生信分析里面的角色,敬请大家关注。
本教程的原链接:
https://davetang.github.io/reproducible_bioinformatics/
生信技能树目前已经公开了三个生信知识库,记得来关注哦~
每周文献分享
https://www.yuque.com/biotrainee/weeklypaper
肿瘤外显子分析指南
https://www.yuque.com/biotrainee/wes
生物统计从理论到实践
https://www.yuque.com/biotrainee/biostat
---来自腾讯云社区的---生信菜鸟团
微信扫一扫打赏
支付宝扫一扫打赏