背景
小师妹突然找到我,问我是否知道怎么做singularity或者docker镜像。细问之下了解到,她的文章在投,因为涉及她自己写的一个工具以及数据分析,编辑要求她提供镜像。原因在上一篇推文其实提到过,总的来说,只提供分析源码和数据本身并不能保证分析的可重复性。因为还有依赖的库以及软件版本改变带来的隐忧。
也许,容器技术在生信领域已经成为其中一种标准了。
这篇推文主要介绍一下2种生成docker镜像的方法。
镜像封装
打包镜像的方法有2种:
- 以某个基础镜像,比如centos7,为基础,运行docker容器,在容器内将所有需要安装的安装完毕后,以该容器为基础生成一个新的镜像。
- 使用dockerfile生成镜像。
我自己的习惯是,先在容器内将需要安装的软件安装一遍,测试所需要安装的工具怎么装,以及是否有需要额外安装的依赖包等等,然后写成Dockerfile再生成新镜像。
对于需要安装的软件包,我们可以直接下载到本地,再使用某些方式放到容器内(后边会细说),也可以联网下载。
方式1:基于容器
先获取1个基础镜像并启动为容器。
docker run -it --name sxydemo --hostname sxy -v $PWD:/docker centos:7
docker run 其实本质上是docker pull(拉取镜像)+ docker start(启动容器)。拉取镜像是从Docker-Hub上。镜像相关信息也可以从上边获取。
-it,其实是-i 和 -t 的组合,一般一起使用,就是开启了一个伪终端,让你可以在终端输入命令进行交互
Name, shorthand Default Description --interactive , -i
Keep STDIN open even if not attached --tty , -t
Allocate a pseudo-TTY