一、什么是dockerfile

    dockerfile可以说是被docker程序解释的脚本,dockerfile由一条条命令组成,docker程序将这些指令翻译成真正的Linux命令去执行。docker程序读取dockerfile并根据指令生成镜像,可以直观的展示镜像产生的过程,后期当有其他的需求,可以修改dockerfile文件,避免重复的构建,省时省力,方便管理

二、dockerfile组成

    一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令# 为 Dockerfile 中的注释

三、命令详解

    

FROM 镜像名称                       #一般指定基础镜像
MAINTAINER 创建者                   #指明维护者信息
RUN 命令	                        #容器中需要执行的命令,run后面接的命令就是Linux的命令
COPY	本地文件 容器路径            #复制本地文件到镜像中,本地路径是dockerfile所在目录为根目录
ADD	本地文件 容器路径	            #复制本地文件到容器中,与COPY的区别是ADD可以直接解压
ENV	                                #设置环境变量
EXPOSE	                            #docker服务端暴露端口,比如我们要镜像中80 和443端口暴露出去  
CMD []                              #括号中需要执行的命令。注意,每个dockerfile只能有一条CMD指令,如果指定了多条,则最后一条被执行
ENTRYPOINT	                        #和CMD一样,唯一不同的是即使启动的时候指定了命令,该命令也不会被覆盖
VOLUME ["/data"]
                                    #作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
USER username
                                    #指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令    之前可以使用RUN命令创建需要的用户。
   
WORKDIR /path
                                   #为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用得是相对路径,则会基 于之前的命令指定路径。

ONBUILD [INSTRUCTION]               #该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令。
#实验前提:下载好nginx的版本tar包和nginx的配置文件到当前Dockerfile目录下
From docker.io/centos 
MAINTAINER 450776259@qq.com
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install vim wget tree lrzsz gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop -y
ADD nginx-1.10.3.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.10.3 && ./configure --prefix=/usr/local/nginx --with-http_sub_module && make && make install
RUN cd /usr/local/nginx
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
RUN useradd nginx -s /sbin/nologin
RUN ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx
RUN echo "test nginx page" > /usr/local/nginx/html/index.html
EXPOSE 80 443
CMD ["nginx"]

三、访问服务验证即可