• docker学习(3)--Dockfile详解


      转载请注明出处:http://www.cnblogs.com/lighten/p/6900556.html

    1.基本说明

      Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法。在一个文件夹中,如果有一个名字为Dockfile的文件,其内容满足语法要求,在这个文件夹路径下执行命令:docker build --tag name:tag .,就可以按照描述构建一个镜像了。name是镜像的名称,tag是镜像的版本或者是标签号,不写就是lastest。注意后面有一个空格和点。

    2.Dockfile语法

      Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面对这些指令的用法一一说明。

    2.1 FROM

      用法:FROM <image>

      说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像。

    2.2 MAINTAINER

      用法:MAINTAINER <name> <email>

      说明:描述镜像的创建者,名称和邮箱

    2.3 RUN

      用法:RUN "command" "param1" "param2"

      说明:RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

    2.4 CMD

      用法:CMD command param1 param2

      说明:CMD在Dockerfile中只能出现一次,有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。

    2.5 EXPOSE

      用法:EXPOSE <port> [<port>...]

      说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效。

    2.6 ENV

      用法:EVN <key> <value> 只能设置一个

           EVN <key>=<value>允许一次设置多个

      说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。

    2.7 ADD

      用法:ADD <src>   <dest>

      说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。

    2.8 COPY

      用法:COPY <src> <dest>

      说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。

    2.9 ENTRYPOINT

      用法:ENTRYPOINT "command" "param1" "param2"

      说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效。

    2.10 VOLUME

      用法:VOLUME ["path"]

      说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。

    2.11 USER

      用法:USER daemon

      说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令。

    2.12 WORKDIR

      用法:WORKDIR path

      说明:为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR  /home  WORKDIR test 。最终的路径就是/home/test。path路径也可以是环境变量,比如有环境变量HOME=/home,WORKDIR $HOME/test也就是/home/test。

    2.13 ONBUILD

      用法:ONBUILD [INSTRUCTION]

      说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。

    3.Dockerfile例子

      一个使用安装包安装的tomcat例子:

    FROM centos
    MAINTAINER nobody "xx@qq.com"
    RUN mkdir -p /opt/jdk/
    RUN mkdir -p /opt/tomcat/
    ADD jdk1.7.0_79	/opt/jdk/
    ADD tomcat	/opt/tomcat/
    ENV CATALINA_HOME /opt/tomcat
    ENV JAVA_HOME /opt/jdk
    EXPOSE 8080
    ENV PATH $PATH:$JAVA_HOME/bin
    CMD ["/opt/tomcat/bin/catalina.sh","run"]
    
  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/lighten/p/6900556.html
Copyright © 2020-2023  润新知