Docker介绍
Docker是目前使用率最高的容器技术,详细技术介绍可以参考Docker官方网站( https://docs.docker.com ) 或者中文社区( docker中文社区,docker帮助,docker手册,docker教程,docker安装手册 - docker中文社区 )。对生信用户来说,Docker容器提供了独立的程序运行环境。不同用户通过使用不同的Docker镜像,拥有了独立的运行环境,包括使用自己熟悉的Linux发行版(centos、ubuntu等等),使用自己需要的软件版本等等。如果不使用容器,用户和系统管理员之间需要大量交互和协商。版本冲突也可能导致计算资源和特定软件绑定,造成资源浪费。Docker很好的解决了这个问题。
Docker 技术几个重要概念
- 镜像(image): 所谓镜像,是指一个静态的系统环境。用户可以创建、删除。镜像是一个系统的静态展现,其中包含了系统相关的文件以及软件。
- 容器(container) : 容器是系统的一个实例,即运行着某一条或一些命令的系统。
- Docker 服务:Docker 镜像资源的使用依托于Docker 服务。Linux 用户可以通过系统管理员用户,安装docker 命令来获取Docker 服务。
- 宿主机 :指运行Docker 服务的机器,此处一般指一台实体的计算机。
如何获取Docker镜像
为了生物信息相关工作者,更方便的使用Docker 容器化技术。极道科技为用户提供了的Docker hub(link here), 用户可以轻松获取生物信息相关的分析软件的镜像资源。
用户可通过在宿主机上运行以下命令来获取镜像资源:
docker pull [镜像名称:标签]
如何制作自己的Docker镜像
虽然目前公开的镜像资源十分丰富,但依然有相当多的工具需要使用者自己进行安装。下面将向用户介绍如何制作自己的镜像资源。
方法一: 手动安装
以安装常用的 blast
程序为例,用户可以先在宿主机下载其对应的程序
cd /mnt/software
wget -c https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.11.0+-x64-linux.tar.gz
下载后,继续在宿主机上运行
sudo docker run -itv /mnt/software:/mnt/software centos:latest bash ## 基础镜像为CentOS 系统
[root@8fa35a09a8a1 /]# ## 此时已经进入一个CentOS 容器,Docker 服务会为每个容器随机分配ID ,在本示例中,容器ID 为 8fa35a09a8a1
此时,用户已经进入了Docker 容器内,并且已经将宿主机的 /mnt/software 目录,挂载至容器的 /mnt/software 目录下了。用户可以进一步对容器进行软件安装。
[root@8fa35a09a8a1 /]# mkdir /mysoft-ware/ ; cp /mnt/software/ncbi-blast-2.11.0+-x64-linux.tar.gz /mysoft-ware/ ; cd /mysoft-ware/ ## 将下载的压缩包复制到 /mysoft-ware/ 目录下
[root@8fa35a09a8a1 /]# tar -xzvf ncbi-blast-2.11.0+-x64-linux.tar.gz
[root@8fa35a09a8a1 /]# ls /mysoft-ware/blast-2.11.0/bin/
[root@8fa35a09a8a1 /]# exit
此时blast已经安装完成,用户可以运行下面的命令,将容器固定化为镜像
docker commit 8fa35a09a8a1 blast:2.11.0 ## 将容器固化为镜像
docker push blast:2.11.0 ## 将镜像推送至集群源
方法二: 通过Dockerfile制作镜像
用户也可以通过Dockerfile 生成镜像,以samtools 的镜像为例,下面为其对应的Dockerfile 中的内容
################## BASE IMAGE ######################
FROM biocontainers/biocontainers:latest
################## METADATA ######################
LABEL base.image="biocontainers:latest"
LABEL version="2"
LABEL software="Samtools"
LABEL software.version="1.3.1"
LABEL about.summary="Tools for manipulating next-generation sequencing data"
LABEL about.home="https://github.com/samtools/samtools"
LABEL about.documentation="https://github.com/samtools/samtools"
LABEL license="https://github.com/samtools/samtools"
LABEL about.tags="Genomics"
################## MAINTAINER ######################
MAINTAINER Saulo Alves Aflitos <sauloal@gmail.com>
RUN conda install samtools=1.3.1
WORKDIR /data/
CMD ["samtools"]
用户将上述内容保存为Dockerfile 后,执行以下代码可以生成对应的镜像
cp /path/to/Dockerfile ./
docker build ./
镜像的使用
运行一个程序
用户可以通过以下命令运行一个docker 任务
docker run -it [image_name:tag] [/path/to/program]
特别地,用户可以通过
docker run -it [image_name:tag] bash
进入镜像,运行程序
进入一个存在的容器
对于一个已经存在的容器,用户可以通过以下命令进入容器查看运行状态
docker exec [container-id] bash
如何映射和访问存储卷
在实际使用上,Docker 必然需要与宿主机存在数据交互。在使用时需要用户启动容器时,增加挂载位置信息,其具体命令如下
docker run -v /path/to/local:/path/to/container [image_name:tag] [program]