如何从看不懂Dockerfile到创建自己的镜像

开始了解Docker是健明的一篇文章跟着jimmy学docker系列之第2讲:一个软件一个容器,那时正在研究虚拟机(Virtual Machine),发现Docker更适合现在的需求,就从基本概念和操作命令开始学习。前期顺风顺水直到看了胡博士的文章使用阿里云+Docker分析RNA-Seq与ChIP-Seq,对其Dockerfile的内容有很多不理解,后来明白Docker并不是单一独立的存在,你想要创建的镜像集成了所需的环境、软件、数据库以及脚本等,是生信处理能力的综合性体现。

显然我知识储备不够,只能默默地回去补习。

我需要Docker做什么

通俗的讲,它和虚拟机的作用类似,实现与宿主机资源和系统环境的隔离。但Docker容器技术相比虚拟机具有许多优点,比如:启动速度快、占用内核资源少、轻便以及可移植性等。

在新药研发中,CFDA规定十年后对相关实验数据进行溯源性分析,依然是准确和一致的。这就需要对当初所用的环境和操作进行“打包”处理,Docker为我们提供了Dockerfile来解决自动化创建images的问题,我们可以通过编辑Dockerfile来定制镜像。按照开发和运维(DevOps)人员说法,就是一次创建或配置可以永久在不同平台运行。

我的学习路径

Docker命令大全

Dockerfile中的指令

B站全套生信视频课程

Docker三要素

Dockerfile  是文件指令集,用来说明如何自动创建Docker镜像

Docker Images  是一个只读模板,用来运行Docker容器

Docker Containers 负责应用程序的运行,包括操作系统、用户添加的文件以及元数据

它们三者之间的关系是,通过定制化地编辑Dockerfile创建Images,Images可被下载到不同平台。

Containers是Images的一个运行实例,可以被开启和关闭。当然,还可使用docker commit命令反过来由Containers生成Images,但一般不建议这样做,主要是因为在运行中的容器中进行操作(如:安装软件或添加无关内容)会导致镜像极其臃肿。

我的实战操作将centos7作为基础镜像并安装一些工具

1. FROM centos:centos7

2. MAINTAINER ZhiHaoPlus,proea_00@163.com

3. RUN yum update  -y && yum upgrade -y &&  \

yum install -y wget git curl curl-devel gcc python python-devel zsh tar bzip2

gcc-c++ readline-devel gmp-devel \

gcc-gfortran cmake zlib zlib-devel mysql mysql-devel libpng libpng12 libpng-devel libtiff libtiff-devel libjpeg \

libjpeg-devel openssh-clients  boost boost-devel && \

yum clean all && rm -rf /tmp/* /var/tmp/*

4. RUN curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" && python get-pip.py && pip install s3cmd设置环境变量、安装miniconda以及所需软件

5. WORKDIR /tmp

6. RUN yum install -y java

7. RUN wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh

8. RUN bash ./Miniconda3-4.5.4-Linux-x86_64.sh -b -p /opt/miniconda3

9. ENV PATH=/opt/miniconda3/bin:$PATH

10. RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/mro/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ && \

conda config --set show_channel_urls yes

11. RUN conda install R -y

RUN conda install bwa -y

RUN conda install samtools -y

RUN conda install tabix -y

RUN conda install bedtools -y

RUN conda install MACS2 -y

RUN pip install pysam==0.8.3 pybedtools==0.6.9

RUN pip install -d . ngslib

RUN pip install HTSeq==0.6.0 brewer2mpl svgwrite seaborn  sklearn

RUN conda install mysql-python

下载数据和脚本

12. RUN mkdir -p /data/fastq /data/fasta /data/script  /source

13. WORKDIR /data/source

14. RUN git clone https://github.com/ZhihaoPlus/DokcerTest.git

若考虑数据的储存和保密性,可使用挂载指令(VOLUME),不过需要注意的是此指令无法指定宿主机上对应的目录,而是自动生成的,因此在启动容器时选择了另一种挂载方式。创建images并修改名称

docker build .

因为在Dockerfile在当前工作目录下,所以用“ . ”代替了绝对路径。

镜像创建成功并生成了一个最终ID

docker images

docker tag aca8551e61bb zhihaoplus/test:test

dcoker images

查看并修改镜像名称启动容器并运行脚本

docker run -it -v ~/data/fastq:/data/fastq -v ~/data/script:/data/script aca8551e61bb

nohup bash /data/script/pipeline.sh &

ps -ef

-v 参数指定挂载点

脚本成功运行起来了

遇到的问题

之前为了测试Dockerfile编辑是否成功,加了指令 CMD echo "Hello,World!",其在启动容器时执行echo命令,然而奇怪的事情发生了,启动容器后确实输出了"Hello,World!"却没进入容器中,就好像没被开启。如下图:

实际上它只是开启后又立即关闭了(Created到Exited只有2秒)。这跟Docker自身机制有关,当容器内的进程全部退出时,容器也会停止运行,也就是说你得让它一直有事干,没有,就会退出。解决办法

最直接保险的方法是,Dockerfile不加入启动指令(CMD和ENTRYPOINT),这样容器启动后会有一个/bin/bash的进程在运行。有需要让脚本在容器启动时运行,则可以加-d参数让容器在后台以守护状态运行docker run -it -d IMAGES_ID /bin/bash。

■   ■   ■

(0)

相关推荐

  • 解密conda channels

    channels是conda下载包的镜像网站,通过如下命令可以查看已有的channels conda config --show channels channels:   - https://mirr ...

  • conda命令那点事

    清华 镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda con ...

  • 国内可用Anaconda 源的镜像站及换国内源方法

    目前清华开源镜像站和中科大开源镜像站均已发出公告表示已取得Anaconda授权,不久就将重新上线Anaconda软件源(见文末图).那目前我知道的国内可用Anaconda源的镜像站就有3个,分别是清华 ...

  • pytorch慢到无法安装,该怎么办?

    最近几天,后台几个小伙伴问我,无论pip还是conda安装pytorch都太慢了,都是安装官方文档去做的,就是超时装不上,无法开展下一步,卡脖子的感觉太不好受. 这些小伙伴按照pytorch官档提示, ...

  • conda国内源

    清华源.中科大源大部分时间能用,但没事也会被封.最近发现的北外源挺好用.推荐使用: 北外镜像(推荐): conda config --add channels https://mirrors.bfsu ...

  • (5条消息) 百度飞浆paddlepaddle下载安装

    (5条消息) 百度飞浆paddlepaddle下载安装

  • Python脚本打包成exe,看这一篇就够了!

    大家好,我是早起. 一直有读者在后台问有关Python脚本打包成exe的问题. 今天就给大家全面总结一下:Python如何打包成exe,以及如何打得足够小. 标准打包 目前比较常见的打包exe方法都是 ...

  • conda与bioconda解决生信软件安装困扰

    简介 conda原本是为了解决Python模块安装的依赖问题,然而可能是无心栽柳柳成荫,conda目前已经超越了其最初目的而存在,可以解决大多数软件的安装和配置,包括各种本身与python毫无关系的包 ...

  • 宏基因组分析专题(2):生物信息学软件的应用市场-Conda的安装流程

    本文由微科盟phage根据实践经验而整理,希望对大家有帮助. 微科盟原创微文,欢迎转发转载. 写在前面 什么是Conda? Conda是一款可以帮助我们轻松安装几乎所有的生物信息学软件的工具,说Con ...

  • (9条消息) win10 Linux子系统WSL2+CUDA11.0+ubuntu

    文章目录 1 WIN10下安装WSL2 1.1wsl2系统安装 1.2 安装自己的一些必须项 1.3 /mnt目录下挂载的文件系统默认权限为777的问题 1.4 wsl2轻量桌面安装 2 NVIDIA ...