前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >可重复的生信分析系列一:Docker的介绍

可重复的生信分析系列一:Docker的介绍

作者头像
生信菜鸟团
发布2020-03-30 14:26:15
2.2K0
发布2020-03-30 14:26:15
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

可重复的生信分析一直是未来的趋势。如果实现可重复的生信分析,关键在于分析软件版本的控制,一致的环境设置还有良好的分析流程的记录。最近发现一篇关于这方面很好的教程。改教程主要分三个方面: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。

  1. https://www.docker.com/products/docker-desktop

下载安装好后,简单查看一下其对应的版本:

代码语言:javascript
复制
docker 
--
version

Docker
 version 
19.03
.
5
,
 build 
633a0ea
 

接着执行强制性的步骤,去检查安装是否正确。如果你的docker被正确安装,它会在你terminal里输出下面的内容:

代码语言:javascript
复制
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的程序

代码语言:javascript
复制
docker pull busybox 

下载后,我们可以通过 docker images命令查看在你的计算器上所有可用的docker镜像:

代码语言:javascript
复制
docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

busybox                     latest              b534869c81f0        
17
 hours ago        
1.22MB 

运行Docker容器

使用 docker run使用docker的镜像,来启动新的docker容器。docker镜像是在运行使用到的文件系统和参数。docker容器可以看作是镜像中一个正在运行的例子。

代码语言:javascript
复制
docker run -it --rm busybox 

参数 -i指定你要交互式运行docker容器。参数 -t指定在启动容器时要运行伪终端。--rm参数指定在退出时自动删除容器。

如果你有不想要的镜像,可以通过下面的命令进行删除:

代码语言:javascript
复制
docker rmi busybox
  
# busybox should now be gone
 
docker images
 
共享文件 

共享文件

Docker容器(通常)不会包含你要分析的数据。你需要指定哪个volumes需要链接在一起。

这里先下载安装好Conda的:

代码语言:javascript
复制
docker pull continuumio/miniconda3 

接着使用以下命令将容器外部的数据链接到容器里:

代码语言:javascript
复制
docker run -it --rm -v /tmp/:/data continuumio/miniconda3 

/tmp/是本地文件系统上数据目录的文件路径。/data是容器中链接数据的文件夹的文件路径。/data文件夹中的任何数据都将被本地文件系统中的数据替换。-v选项指定你本地需要替换到容器里的路径。对容器中数据所做的任何更改,都会同步到本地文件的数据中。

这里可以看到,咱们在容器里创建的 data/hello.txt,同样可以在本地路径 /tmp/中找到。

代码语言:javascript
复制
(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的镜像:

代码语言:javascript
复制
docker pull davetang/rstudio_biocasia
 

成功下载安装镜像后,请尝试运行以下命令。下面的输出表明,该镜像正在使用Debian操作系统。

代码语言:javascript
复制
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服务器

在浏览器中启动容器:

代码语言:javascript
复制
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来查看哪些容器正在运行。

代码语言:javascript
复制
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 。

代码语言:javascript
复制
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的文件夹中使用以下命令构建镜像:

代码语言:javascript
复制
docker build -t davetang/rstudio . 

成功创建Docker镜像后,可以将其推送到Docker Hub,以便其他人可以使用它。首先,使用你的DockerHub用户名和密码登录。

代码语言:javascript
复制
docker login 

然后将镜像推送到Docker Hub。

代码语言:javascript
复制
docker push davetang/rstudio 

使用docker做生信分析的例子

下载测试数据,https://github.com/davetang/learningvcffile/blob/master/aln_consensus.bcf,并将下载好的数据移动到你需要挂在的路径中:

代码语言:javascript
复制
# 下载镜像
 
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Docker?
  • 为什么要用Containers?
  • 关于Docker的基础
  • 下载我们第一个docker镜像
  • 运行Docker容器
  • 共享文件
  • RStudio服务器的构建
  • 从Docker运行RStudio服务器
  • 为你的项目创建Docker镜像
  • 使用docker做生信分析的例子
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档