可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。最近发现一篇关于这方面很好的教程。改教程主要分三个方面:Docker的介绍,Conda的介绍还有Workflowr的教程。通过使用这几个不同的工具实现上面提到的要素,进而进行可重复的生信分析。今天先讲第一部分 Docker的介绍
。
Docker是一个使用OS级虚拟化的平台,在被称为Containers的环境中运行软件,这些程序container是完全隔离的环境。它们可以拥有自己的进程或服务或网络接口,就像单独虚拟机(VM)一样。但它们与VM又有所不同,它们“共享”了OS内核。Docker的镜象是静态(固定)的模板,而containers是动态的镜像。
Containers能更简单的传导(对开发人员有用)和更简单地在本地系统上使用不同的工具(对用户有用)。Containers封装了软件组件及其相应的依赖项,因此你只需下载对应的镜像就相当于安装了软件,然后在支持Docker的任何系统上运行它。BioContainers项目已将许多生物信息学工具包装在一起。他们在Docker Hub上有1000多个存储库,其中包含各种生物信息工具的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 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 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
下面我们尝试使用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 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镜像是基于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
下载测试数据,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