美文网首页
构建Docker镜像实例

构建Docker镜像实例

作者: 盆栽酱 | 来源:发表于2020-02-12 00:37 被阅读0次

一、认识Dockerfile

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

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

Dockerfile常用语法只有11个:

示例:

官方Dockerfile一----conda/miniconda3

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

FROM debian:latest
MAINTAINER Conda Development Team <conda@continuum.io>

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镜像

    Docker镜像是构建docker容器的基础,容器是docker镜像的运行的实例。构建镜像只用三条命令就可以搭建一...

  • 构建Docker镜像实例

    一、认识Dockerfile Dockerfile是用来描述文件的构成的文本文档,其中包含了构成镜像的所有命令,通...

  • 30分钟掌握docker的基本使用

    docker 入门 目标 基于centos 7实例操作安装docker 获取mysql镜像 构建一个mysql容器...

  • docker常用操作

    下载docker镜像 查看docker镜像 搜索docker镜像 开启docker容器 查看全部docker实例 ...

  • Docker 入门

    docker 配置参数说明 实例 配置参数说明( DockerFile 学习): FROM:FROM 是构建镜像的...

  • python基于Ubuntu下开发环境的准备

    利用Docker搭建Ubuntu环境 安装Docker 基于Dockerfile构建ubuntu镜像 构建镜像 查...

  • Learning Docker Part 002 Docker

    构建镜像 Docker提供了两种构建镜像的方法: docker commit命令 Dockerfile 构建文件 ...

  • Docker部署(二):MySQL数据库

    Docker 容器构建 使用Dockerfile构建镜像 使用官方提供的Docker镜像 所谓Dockerfile...

  • Docker镜像

    镜像: 获取镜像: 构建制作镜像.docker自带 docker commitdockerfile (推荐)封装...

  • 《第一本Docker书》笔记

    初步 确认Docker信息: 镜像 查看镜像 镜像搜索 获取镜像 构建镜像 docker commit Docke...

网友评论

      本文标题:构建Docker镜像实例

      本文链接:https://www.haomeiwen.com/subject/btkuxhtx.html