DockerFile指令集

 FROM   
        语法:FROM <image>[:<tag>]
        解释:设置要制做的镜像基于哪一个镜像,FROM指令必须是整个Dockerfile的第一个指令,若是指定的镜像不存在默认会自动从Docker Hub上下载。
 
    MAINTAINER
        语法:MAINTAINER <name>
        解释:MAINTAINER指令容许你给将要制做的镜像设置做者信息
 
    RUN
        语法:①RUN <command>        #将会调用/bin/sh -c <command>
                  ②RUN ["executable", "param1", "param2"]    #将会调用exec执行,以免有些时候shell方式执行时的传递参数问题,并且有些基础镜像可能不包含/bin/sh
        解释:RUN指令会在一个新的容器中执行任何命令,而后把执行后的改变提交到当前镜像,提交后的镜像会被用于Dockerfile中定义的下一步操做,RUN中定义的命令会按顺序执行并提交,这正是Docker廉价的提交和能够基于镜像的任何一个历史点建立容器的好处,就像版本控制工具同样。
 
    CMD
        语法:①CMD ["executable", "param1", "param2"]    #将会调用exec执行,首选方式
                  ②CMD ["param1", "param2"]        #当使用ENTRYPOINT指令时,为该指令传递默认参数
                  ③CMD <command> [ <param1>|<param2> ]        #将会调用/bin/sh -c执行
        解释:CMD指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,若是使用了多个CMD指令,则只有最后一个CMD指令有效。当出现ENTRYPOINT指令时,CMD中定义的内容会做为ENTRYPOINT指令的默认参数,也就是说可使用CMD指令给ENTRYPOINT传递参数。
        注意:RUN和CMD都是执行命令,他们的差别在于RUN中定义的命令会在执行docker build命令建立镜像时执行,而CMD中定义的命令会在执行docker run命令运行镜像时执行,另外使用第一种语法也就是调用exec执行时,命令必须为绝对路径。
 
    EXPOSE
        语法:EXPOSE <port> [ ...]
        解释:EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口,Docker在链接不一样的容器(使用–link参数)时使用这些信息。
 
    ENV
        语法:ENV <key> <value>
        解释:ENV指令用于设置环境变量,在Dockerfile中这些设置的环境变量也会影响到RUN指令,当运行生成的镜像时这些环境变量依然有效,若是须要在运行时更改这些环境变量能够在运行docker run时添加–env <key>=<value>参数来修改。
        注意:最好不要定义那些可能和系统预约义的环境变量冲突的名字,不然可能会产生意想不到的结果。
 
    ADD
        语法:ADD <src> <dest>
        解释:ADD指令用于从指定路径拷贝一个文件或目录到容器的指定路径中,<src>是一个文件或目录的路径,也能够是一个url,路径是相对于该Dockerfile文件所在位置的相对路径,<dest>是目标容器的一个绝对路径,例如/home/yooke/Docker/Dockerfile这个文件中定义的,那么ADD /data.txt /db/指令将会尝试拷贝文件从/home/yooke/Docker/data.txt到将要生成的容器的/db/data.txt,且文件或目录的属组和属主分别为uid和gid为0的用户和组,若是是经过url方式获取的文件,则权限是600。
        注意:①若是执行docker build – < somefile即经过标准输入来建立时,ADD指令只支持url方式,另外若是url须要认证,则能够经过RUN wget …或RUN curl …来完成,ADD指令不支持认证。
                  ②<src>路径必须与Dockerfile在同级目录或子目录中,例如不能使用ADD ../somepath,由于在执行docker build时首先作的就是把Dockerfile所在目录包含子目录发送给docker的守护进程。
                  ③若是<src>是一个url且<dest>不是以”/“结尾,则会下载文件并重命名为<dest>。
                  ④若是<src>是一个url且<dest>以“/”结尾,则会下载文件到<dest>/<filename>,url必须是一个正常的路径形式,“http://example.com”像这样的url是不能正常工做的。
                  ⑤若是<src>是一个本地的压缩包且<dest>是以“/”结尾的目录,则会调用“tar -x”命令解压缩,若是<dest>有同名文件则覆盖,但<src>是一个url时不会执行解压缩。
 
    COPY
        语法:COPY <src> <dest>
        解释:用法与ADD相同,不过<src>不支持使用url,因此在使用docker build – < somefile时该指令不能使用。
 
    ENTRYPOINT
        语法:①ENTRYPOINT ["executable", "param1", "param2"]        #将会调用exec执行,首选方式
                  ②ENTRYPOINT command param1 param2             #将会调用/bin/sh -c执行
        解释:ENTRYPOINT指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,若是使用了多个ENTRYPOINT指令,则只有最后一个指令有效。ENTRYPOINT指令中指定的命令(exec执行的方式)能够经过docker run来传递参数,例如docker run <images> -l启动的容器将会把-l参数传递给ENTRYPOINT指令定义的命令并会覆盖CMD指令中定义的默认参数(若是有的话),但不会覆盖该指令定义的参数,例如ENTRYPOINT ["ls","-a"],CMD ["/etc"],当经过docker run <image>启动容器时该容器会运行ls -a /etc命令,当使用docker run <image> -l启动时该容器会运行ls -a -l命令,-l参数会覆盖CMD指令中定义的/etc参数。
        注意:①当使用ENTRYPOINT指令时生成的镜像运行时只会执行该指令指定的命令。
                  ②当出现ENTRYPOINT指令时CMD指令只可能(当ENTRYPOINT指令使用exec方式执行时)被当作ENTRYPOINT指令的参数使用,其余状况则会被忽略。
 
    VOLUME
        语法:VOLUME ["samepath"]
        解释:VOLUME指令用来设置一个挂载点,能够用来让其余容器挂载以实现数据共享或对容器数据的备份、恢复或迁移,具体用法请参考其余文章。
 
    USER
        语法:USER [username|uid]
        解释:USER指令用于设置用户或uid来运行生成的镜像和执行RUN指令。
 
    WORKDIR
        语法:WORKDIR /path/to/workdir
        解释:WORKDIR指令用于设置Dockerfile中的RUN、CMD和ENTRYPOINT指令执行命令的工做目录(默认为/目录),该指令在Dockerfile文件中能够出现屡次,若是使用相对路径则为相对于WORKDIR上一次的值,例如WORKDIR /data,WORKDIR logs,RUN pwd最终输出的当前目录是/data/logs。
 
    ONBUILD
        语法:ONBUILD [INSTRUCTION]
        解释:ONBUILD指令用来设置一些触发的指令,用于在当该镜像被做为基础镜像来建立其余镜像时(也就是Dockerfile中的FROM为当前镜像时)执行一些操做,ONBUILD中定义的指令会在用于生成其余镜像的Dockerfile文件的FROM指令以后被执行,上述介绍的任何一个指令均可以用于ONBUILD指令,能够用来执行一些由于环境而变化的操做,使镜像更加通用。
        注意:①ONBUILD中定义的指令在当前镜像的build中不会被执行。
                  ②能够经过查看docker inspeat <image>命令执行结果的OnBuild键来查看某个镜像ONBUILD指令定义的内容。
                  ③ONBUILD中定义的指令会当作引用该镜像的Dockerfile文件的FROM指令的一部分来执行,执行顺序会按ONBUILD定义的前后顺序执行,若是ONBUILD中定义的任何一个指令运行失败,则会使FROM指令中断并致使整个build失败,当全部的ONBUILD中定义的指令成功完成后,会按正常顺序继续执行build。
                  ④ONBUILD中定义的指令不会继承到当前引用的镜像中,也就是当引用ONBUILD的镜像建立完成后将会清除全部引用的ONBUILD指令。
                  ⑤ONBUILD指令不容许嵌套,例如ONBUILD ONBUILD ADD . /data是不容许的。
                  ⑥ONBUILD指令不会执行其定义的FROM或MAINTAINER指令。
相关文章
相关标签/搜索