构建Docker镜像实例

一、认识Dockerfile

Dockerfile是用来描述文件的构成的文本文档,其中包含了构成镜像的所有命令,通过docker build 命令识别Dockerfile可以自行构建镜像。

通过Dockerfile生成的镜像,可以明确知道镜像中所包含的软件和生成过程。

Dockerfile常用语法只有11个:

构建Docker镜像实例_第1张图片

示例:

官方Dockerfile一----conda/miniconda3

https://hub.docker.com/r/conda/miniconda3/dockerfile

FROM debian:latest
MAINTAINER Conda Development Team 

RUN apt-get -qq update && apt-get -qq -y install curl bzip2 \
    && curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
    && bash /tmp/miniconda.sh -bfp /usr/local \
    && rm -rf /tmp/miniconda.sh \
    && conda install -y python=3 \
    && conda update conda \
    && apt-get -qq -y remove curl bzip2 \
    && apt-get -qq -y autoremove \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /var/log/dpkg.log \
    && conda clean --all --yes

ENV PATH /opt/conda/bin:$PATH

解读:

1.基于镜像debian:latest(Debian是一种操作系统,等比ubuntu)
2.作者是Conda官方
3.执行命令是升级apt-get和下载miniconda安装包并解压、安装。
4.最后是讲conda安装路径加入到环境变量中。

官方Dockerfile二----makaho/hisat2-zstd

https://hub.docker.com/r/makaho/hisat2-zstd/dockerfile

# Set the base image to debian based miniconda3
FROM conda/miniconda3

# File Author / Maintainer
MAINTAINER Matthias Becker

RUN conda config --add channels r
RUN conda config --add channels defaults
RUN conda config --add channels conda-forge
RUN conda config --add channels bioconda

RUN conda install -y hisat2=2.1.0
RUN conda install -y zstd
RUN conda install -y pigz
RUN conda install -y fastp=0.13.1

解读:

1.基于镜像conda/miniconda3,也就是示例一构建的镜像
2.作者是Matthias Becker
3.执行设置conda的下载源的命令
4.使用conda下载对应的软件。

官方Dockerfile三----yyabuki/stringtie

https://hub.docker.com/r/bmennis/stringtie/dockerfile

FROM ubuntu:18.04

RUN \
  apt-get update && apt-get -y upgrade && apt-get install -y build-essential make git wget zlib1g-dev libbz2-dev && \
  wget -c http://ccb.jhu.edu/software/stringtie/dl/stringtie-1.3.6.tar.gz && \
  tar -zxvf stringtie-1.3.6.tar.gz && \
  cd stringtie-1.3.6 && \
  make && \
  cp stringtie /usr/local/bin

解读:

1.基于镜像ubuntu:18.04
2.相应升级后下载stringtie安装包并解压
3.make编译(不少生信软件解压后需要make编译)

二、简洁明了的Dockerfile

编写简介的Dockerfile主要需要以下几点:

  • Dockerfile层级不宜过多,越多镜像越大。
  • 构建过程中及时删除无用的log文件、压缩包等。
  • 需要安装通关网络下载的安装包,可以先手动下载,通过add命令添加进镜像

拿第一个官方的Dockerfile示例来看

推荐

RUN apt-get -qq update && apt-get -qq -y install curl bzip2 \
    && curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
    && bash /tmp/miniconda.sh -bfp /usr/local \
    && rm -rf /tmp/miniconda.sh \
    && conda install -y python=3 \
    && conda update conda \
    && apt-get -qq -y remove curl bzip2 \
    && apt-get -qq -y autoremove \
    && apt-get autoclean \
    && rm -rf /var/lib/apt/lists/* /var/log/dpkg.log \
    && conda clean --all --yes

不推荐

RUN apt-get -qq update && apt-get -qq -y install curl bzip2 \
RUN curl -sSL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -o /tmp/miniconda.sh \
RUN bash /tmp/miniconda.sh -bfp /usr/local \
RUN rm -rf /tmp/miniconda.sh \
RUN conda install -y python=3 \
RUN conda update conda \
RUN apt-get -qq -y remove curl bzip2 \
RUN apt-get -qq -y autoremove \
RUN apt-get autoclean \
RUN rm -rf /var/lib/apt/lists/* /var/log/dpkg.log \
RUN conda clean --all --yes

简单看第二种好像更加规整,但第二种所用的层级更多,这会导致占用更多的空间,这个看上去差别不大,但当是用conda安装R包的时候,差异更加明显。

第二种也有优点,如果中间某一步因为使用网络安装软件等问题中断时,重新built镜像,第一种就会重新开始,而第二种会在报错的前一个层级继续往下构建镜像,在时间上有节约。

因此,推荐先手动在镜像中测试安装命令,大文件先手动下载到本地,然后通过add等添加到镜像中,可以节省很多测试时间。

你可能感兴趣的:(构建Docker镜像实例)