如何制作镜像
什么是Docker?什么是Docker镜像
Docker是一个功能强大的开放软件平台。通过封装软件到Docker镜像(image)中,可以使软件在不同平台与环境下运行。同时人们可以将Docker镜像放在公共(Docker Hub)或私有的Docker仓库(repository)中,互相分享。这些都极大地方便了软件的安装、分享以及运行。
为什么要制作生物信息软件的Docker镜像
生物信息分析过程中,软件的安装、运行和管理往往依赖不同的操作系统(如Linux、Mac等)、不同软件包(如python、java或者是众多C语言的包)、不同的软件版本(如Picard的2.2.4版本要求Java 8版本)。因此将生物信息学的软件封装到Docker镜像中,可以使你的程序在不同环境下运行,不需要考虑环境依赖的问题。使用镜像来管理工作流,可以实现一处管理多处迁移,包括我们GeneDock的云平台。
GeneDock平台提供了公共镜像
Docker安装需要的依赖环境
对于RHEL6/Centos系列的机器,docker官网建议的操作系统的最低需求为:64-bit version of RHEL 7。
对于Ubuntu系列的机器,docker官网建议的操作系统的最低需求为:
Yakkety 16.10 Xenial 16.04 (LTS) Trusty 14.04 (LTS)
详细情况请访问:https://docs.docker.com/engine/installation/linux/ 。
如何安装Docker
Docker安装的具体步骤请参考:
如何制作Docker镜像
在安装完Docker之后,制作Docker镜像有两种方法, build 和 commit。我们强烈建议用户使用build的方法,以方便追溯和修改。
在使用docker build
命令之前,需要编写Dockerfile来自定义镜像。Dockerfile包含了用户指定的基础镜像(即上层镜像依赖的一个基本环境,本文档目前建议使用ubuntu:14.04),所需要安装的软件和依赖关系。
写好Dockefile文件后并保存,在当前目录使用:
docker build -t <name:tag> .
<name:tag>
指的是你希望Docker镜像叫什么名字,有什么标签。不要忘记最后的“.”.
例如,你写好Dockerfile保存在“~/program/dockerlib/bwa/”目录下,想创建一个镜像,名字为bwa,标签为latest,不过建议tag用1.0等版本控制,不要用latest不好追踪的tag。
cd ~/program/dockerlib/bwa/
docker build -t bwa:latest .
如何写Dockerfile文件
这里我们以常用的用于序列比对的生物信息软件BWA为例,介绍如何写Dockerfile(文末附录有完整的Dockerfile)。bwa的Docker镜像的制作主要有以下几个步骤:
- 操作系统基础镜像:
我们选择’ubuntu:14.04’这一常用的长期支持的linux系统,通过docker pull ubuntu:14.04
从Docker Hub上下载。之后在Dockerfile中用FROM
命令导入(注:在Dockerfile中Docker特定的命令一般用大写)。
FROM ubuntu:14.04
- 安装常用工具和依赖包:
从Docker Hub上下载的ubuntu:14.04基础镜像很多包和工具均没有,我们可以通过ubuntu系统的apt-get包管理系统来安装。下载BWA源代码需要git命令,编译BWA需要build-essential,而BWA软件需要zlib包。运行命令,需要RUN
命令。
RUN apt-get install -y apt-utils \
git \
build-essential \
zlib1g.dev
- 下载BWA源代码并编译:
在github上下载最新的BWA源码,用make命令编译。
RUN git clone https://github.com/lh3/bwa.git --depth 1
RUN cd bwa
RUN make
- 添加环境变量:
利用ENV
命令将bwa添加到环境变量中方便使用。假如你将bwa保存并编译在/bioapp/bwa目录下,你可以通过如下命令添加环境变量。
ENV PATH /bioapp/bwa:$PATH
- 其他:
对于制作在GeneDock平台上可以运行的Docker镜像,你还需要注意以下几个问题:
- 将系统的时间更改为北京时间
- 将系统默认的ubuntu的源列表改成国内的镜像,以提高安装速度
- 建议创建一个bioapp的文件夹方便存储源代码
- 由于GeneDock使用目录’/var/data’存储数据,故最后将工作目录切换一下
这些步骤的细节请看附录。
如何在GeneDock平台上使用Docker镜像
制作完Docker镜像后,你需要将本地的镜像上传到GeneDock你自己用户名的私有仓库下。
- 登录GeneDock Docker registry(私有注册服务器)
docker login cn-<endpoint>-registry.genedock.com
<endpoint>
指的是你GeneDock账号所在的工作域(beijing或者shenzhen)。回车后,提示需要输入
Username:
,请填写admin@企业账号
,如您的账号名是account,则填写admin@account
为了方便记忆,可以使用
docker login cn-<endpoint>-registry.genedock.com -u admin@account -p PASSWD
登录GeneDock的docker镜像服务器
- 更改本地Docker镜像的名字
docker tag <name:tag> cn-beijing-registry.genedock.com/<yourname>/<name:tag>
<name:tag>
指的是你的Docker镜像的名字和标签。
<yourname>
指的是账号名,例如account
。
- 上传镜像
docker push cn-beijing-registry.genedock.com/<yourname>/<name:tag>
例如,你的GeneDock账户叫account
,在北京域,你在本地制作了Docker镜像bwa:latest,现在想在GeneDock平台上使用这个镜像。
docker login cn-beijing-registry.genedock.com
docker tag bwa:latest cn-beijing-registry.genedock.com/account/bwa:latest
docker push cn-beijing-registry.genedock.com/account/bwa:latest
至此,你就可以在GeneDock网站自己的账号下查看你上传的Docker镜像了。具体为:GeneDock管理控制台 -> 工具 -> 创建工具 -> 镜像。
公共镜像
为了方便用户创建工作流,GeneDock提供了WGS相关的等公共镜像。
- 公共镜像说明
公共镜像已经上传到了dockerhub,地址为 https://hub.docker.com/orgs/seqflow/repositories.
镜像名称 | tag名称 | 描述 |
---|---|---|
seqflow/genedock_wgs | 1.0 | bwa:0.7.17 (可直接调用:bwa,也可绝对路径调用:/bioapp/bwa-0.7.17/bwa) samtools: 1.10 (可直接调用:bwa,也可绝对路径调用:/bioapp/samtools-1.10/samtools) fastqc: 0_11_9 (可直接调用:fqstqc,也可绝对路径调用:/bioapp/FastQC_0_11_9/fastqc ) sentieon:201808.01 (绝对路径调用:/bioapp/sentieon-genomics-201808.01/bin/sentieon ) gatk4: 4.1.8.0 (可直接调用:gatk,也可绝对路径调用:/bioapp/gatk-4.1.4.1/gatk ) trimmomatic:0.39 (绝对路径调用:java -jar /bioapp/Trimmomatic-0.39/trimmomatic-0.39.jar) picrad: 2.23.1 (绝对路径调用:java -jar /bioapp/picard-2.23.1/picard.jar) gatk3: 3.8 (绝对路径调用:java -jar /bioapp/gatk-3.8/GenomeAnalysisTK_3.8.jar) tabix: 1.10 (可直接调用:tabix) bgzip: 1.10 (可直接调用:tabix) python: 2.7.5 java: 1.8 perl :5.16.3 |
使用方式
- 下载本地
用户可以使用
docker pull seqflow/genedock_wgs:1.0
下载到本地进行测试- 制作工具
用户在设置工具的runtime使用,例如:
runtime { docker: "seqflow/genedock_wgs:1.0" memory: "4096m" disk: "10240m" cpu: 2
小贴士
- 1 常见报错 不正确使用
docker login
命令会有如下报错:- 报错
Error response from daemon: Get https://cn-beijing-registry.genedock.com/v2/: unauthorized: authentication required
。 原因:是用户名或者密码错误。 - 报错
Error response from daemon: Get https://cn-beijing-registryxxx.genedock.com/v1/users/: dial tcp: lookup cn-beijing-registryxxx.genedock.com on 192.168.65.1:53: no such host
。 原因:域名写错了,无法解析域名。 - 报错
Could not resolve host: github.com
。原因是daemon 的连接有问题,修改daemon的docker0网桥,参考网址。一些常用Docker命令
- 报错
这里我们再介绍一些其他常用的Docker命令,方便大家对创建好的镜像进行操作。
docker images
:查看创建的Docker镜像docker rmi
:删除一个Docker镜像docker run
:运行Docker镜像,如在Docker镜像bwa:latest运行bwa命令,可以docker run bwa:latest bwa
docker run -it
:以交互的模式运行一个Docker镜像,方便我们debugdocker --help
:查看到Docker帮助docker help <commands>
:查看具体某个命令(command)的帮助
扩展阅读:
附录
完整的Dockerfile文件(注意后续的source.list和timezone文件也要确保在当前路径):
#Dockerfile to install Bio apps (include BWA)
#version 1.0
#http://bio-bwa.sourceforge.net/
#https://github.com/lh3/bwa
FROM ubuntu:14.04
MAINTAINER Li Ming, liming@genedock.com
MAINTAINER Wang Huanwei, wanghuanwei@genedock.com
#change the timezone
#import source package, update the source
# COPY ./sources.list /
RUN bash -c 'echo -e "Asia/Shanghai" > /etc/timezone'
RUN bash -c 'echo -e "deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse\ndeb http://cn.archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse\ndeb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse\ndeb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse\n" >/etc/apt/sources.list' && cat /etc/apt/sources.list && apt-get update
#install dependencies
#apt-utils, package managment related utility programs
#git, download source code from github
#build-essential, compile the source code
#zlib, a data compression library, required by bwa
#zlib1g (installed in ubuntu:14.04), runtime
#zlib1g.dev, development
RUN apt-get install -y apt-utils \
git \
build-essential \
zlib1g.dev
##install bwa
RUN mkdir /bioapp
WORKDIR /bioapp
RUN git clone https://github.com/lh3/bwa.git --depth 1
WORKDIR /bioapp/bwa
RUN make
##configuration the env
ENV PATH /bioapp/bwa:$PATH
##clean
RUN apt-get clean
##switch the directory
WORKDIR /var/data