FROM

  • FROM scratch #制作base image
  • FROM centos #使用base image
  • FROM ubuntu:14.04

FROM 是Dockerfile 最开头的关键字,它制定了我们要Build 的Docker image 的Base image 是什么,就是我们想在哪个image 之上去Build 我们的image ,如最开始的 Hello-world,它没有依赖任何Base image ,这样的话我们就选FROM scratch ,从头制作一个Base image ,更多的情况是使用已有的Base image,比如说官方的centos 的已有的Base image ,然后FROM centos ,这样的话可以在centos 的基础之上去Build image,同样也可以选择一些其他的Linux 发行版,如:ubntu

FROM 尽量使用官方的image 作为base image ->为了安全

LABEL 

  • LABEL maintainer="[email protected]"
  • LABEL version="1.0"
  • LABLE description="This is description"

LABEL 这个语法在Dockerfile 里面定义了我们的image Metadata

对于LABEL 来讲 Metadata 不可少!->对于image来讲它必须有一些帮助信息,就像我们平常了解的注释一样

RUN

  • RUN yum update && yum install -y vim \

python-dev # 反斜线换行                                                       

  • RUN apt-get update && apt-get install -y perl \

pwgen --no-install-recommends && rm -rf \                      

/var/lib/apt/lists/*   #注意清理 cache                                     

  • RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

我们每RUN 一次,对image 来讲都会生成新的一层

RUN 为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!

WORKDIR

  • WORKDIR /root
  • WORKDIR /test # 如果没有会自动创建test 目录
  • WORKDIR demo
  • RUN pwd # 输出结果应该是 /test/demo

WORKDIR 是设定当前公公目录的,有点像Linux 中使用cd 改变当前目录位置

WORKDIR 用WORKDIR,不要用 RUN cd!尽量使用绝对目录!

ADD and COPY

  • ADD hello /
  • ADD test.tar.gz / # 添加到根目录并解压
  • WORKDIR /root

ADD hello test/ # /root/test/hello                                                           

  • WORKDIR /root

COPY hello test/                                                                                     

ADD 和 COPY 非常像,都是通过把本地的文件添加到Docker image 里面

ADD or COPY 大部分情况,COPY优于ADD!ADD除了COPY还有额外功能(解压)!添加远程文件/目录请使用curl或者wget!

ENV

  • ENV MYSQL_VERSION 5.6  # 设置常量
  • RUN apt-get install -y mysql-server= "${MYSQL_VERSION}" \

&& rm -rf /var/lib/apt/lists/*  # 引用常量                              

ENV 尽量使用 ENV 增加可维护性!

    VOLUME and EXPOSE (存储和网络)

    CMD and ENTRYPOINT 

    要想对Dockerfile 有更加深入的了解可以搜索Dcokerfile reference 官网,里面详细的描述了Dockerfile 里面的语法和语法的使用场景

    07-15 19:21