• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Dockerfile中常用命令汇总

    语法组成:

    1 注释信息
    2 指令---参数 [通常要大写|实质上不区分大小写]
    3 顺序执行
    4 第一个非注释行必须是from [基于那个基础镜像制作]  
    5 需要一个专用目录[自己创建]
    6 首字目必须大写---Dockerfile
    7 制作镜像依赖到文件或者包组时,必须提前准备至专用目录下

    .dockerignore file --每一行中定义一个忽略文件
        --创建在工作目录中
        例如:pam.d/su*

    .........................................................

    dockerfile中的常用指令:

    1 FROM ---指定基础镜像

        基础镜像不存在会在Docker Hub上拉去
    使用格式:  
    FROM <镜像>:[tag]    
    FROM <镜像>@digest[校验码]
    当前主机没有此镜像时,会自动去官网HUB下载
    ..............................................

    2 MAINTANIER --提供Dockerfile 制作者提供本人信息

        [逐渐废弃]
    LABLE --替代MAINTANIER
    具体使用:
    LABLE maintainer="作者信息"

    使用格式:

    MAINTANIER "guowei <597599150@qq.com>"

    .......................................................

    3 COPY --把宿主机中的文件复制到镜像中去!

        文件要在Dockerfile工作目录
    src 原文件
        --支持通配符
        --通常相对路径
    dest 目标路径  
        --通常绝对路径

    有空白字符隔开的字串需要用"",否则会被当做两个文件!

    文件复制准则:
    1 src必须是build上下文中的路径,不能是其父目录
    2 如果src是目录,则其内部文件或子目录会被递归复制
       但src目录自身不会被复制
    3 如果指定了多个src,或在src中使用了通配符,则dest必须是一个
      目录,且必须以/结尾
    4 如果dest实现不存在,它将会被自动创建,这包括其父目录
    ..............................................................

    4 ADD --类似COPY命令

    支持URL路径----如果可以访问网络的话,会访问网络下载
    到本地然后打包进镜像!

    操作准则:
    1 如果src为URL且dest不以/结尾,则src指定的文件将被下载并
    直接被创建为dest;如果dest以/结尾,则文件名URL指定的文件
    将被直接下载并保存为dest/filename

    2 如果是压缩包会被解压,但通过URL路径获取到的tar文件不会被展开

    3 如果src有多个,或其间接或直接使用了通配符,则dest必须是一个
    以/结尾的目录路径,如果dest不以/结尾,则其被视为一个普通文件
    src的内容将被直接写入到dest中!

    ...............................................................

    5 WORKDIR --指定工作目录

    每次只会影响这个指令后续的指令

    ADD nginx-1.14.2.tar.gz /usr/local/src/ --不受影响

    WORKDIR /usr/local/src/

    ADD nginx-1.14.2.tar.gz ./ --受影响

    .............................................................

    6 VOLUME --卷

    只能定义docker管理的卷:
    VOLUME /data/mysql

    运行的时候会随机在宿主机的目录下生成一个卷目录!
    ................................................................

    7 EXPOSE 为容器打开指定要监听的端口以实现与外部通信

    使用格式:
    EXPOSE 80/tcp 23/udp

    不加协议默认为tcp

    使用-P选项可以暴露这里指定的端口!
    但是宿主的关联至这个端口的端口是随机的!
    ..............................................................

    8 ENV

    用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于
    其后的其它命令所调用

    调用格式:
    $A 或 ${A}

    ENV <key> <value>
    ENV <key>=<value>

    第一种格式中,key之后的所有内容均会被其视作<value>的组成部分
    因此,一次只能设置一个变量!

    第二种格式可用一次设置多个变量,每个变量为一个<key>=<value>
    的键值对,如果<value>中包含空格,可以反斜线(\)进行转义
    也可以通过对<value>加引号进行标识。另外,反斜线也可用于续航

    定义多个变量时。建议使用第二种方式,以便在同一层中完成所有功能
    具体用法:
    ENV JAVA_HOME /usr/local/jdk
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
    ENV PATH $PATH:$JAVA_HOME/bin/

    ENV A /web/html

    COPY index.html ${A:-/web/html}

    在docker run 中传递变量:
    docker run -e [list] 传变量值
    如果在dockerfile中赋值变量后也能在docker run中继续赋值
    docker run --name b1 --rm -e A=xx [镜像ID]
    不会影响docker build 的过程!

    printenv --输出环境变量信息

    ..............................................................

    9 RUN命令:

    使用格式:
    RUN <command>
    RUN ["<executable>","<param1>","<param2>"]

    第一种格式中 <command命令通常是一个shell命令 且以"/bin/sh -c">来运行它
    这意味此进程在容器中的PID不能为1,不能接收Unix信号,因此,当使用docker stop命令
    来停止容器时,此进程接收不到信号

    第二种语法格式中的参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面的
    <paramN>为传递给命令的选项或参数,然而,此种格式指定的命令不会以"/bin/sh -c">来运行它
    因此常见的shell操作如变量替换以及通配符替换将不会进行 不过如果要运行的命令依赖于
    此shell特性的话,可以将其替换为下面的格式:
    RUN ["/bin/bash","-c","<executable>","<param1>"]

    ........................................................................

    10 CMD命令:运行于docker run中

    语法有三种写法
    1. CMD ["executable","param1","param2"] --启动为ID为1的进程
    具体实例:

    CMD ["/bin/sh","-c","/bin/httpd","-f","-h /web/html]

    2. CMD ["param1","param2"]
    3. CMD command param1 param2 --直接运营为shell的子进程
    param*=执行参数
    例如第二种:
    CMD ["nginx"]

    docker run -it -p 8888:80 172.20.23.31/server1/nginx-base:v1 nginx

    只能是双引号!

    CMD ["param1","param2"]
     --此种用法用于为ENTRYPOINT指令提供默认参数

    可用于执行脚本:
    添加脚本:

    ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh

    RUN chmod +x /apps/tomcat/bin/run_tomcat.sh

    RUN chown -R tomcat:tomcat /apps /data/tomcat

    CMD ["/apps/tomcat/bin/run_tomcat.sh"] -- 引用脚本!

    ..............................................................

    11 ENTRYPOINT

    类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独
    的可执行程序

    与CND不同的是,由这个指令启动的程序不会被docker run 命令行指定的参数所覆盖
    而且,这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序

    使用格式:

    ENTRYPOINT <command>
    ENTRYPOINT ["<executable>","<param1>","<param2>"]

    docker run 命令传入的命令参数会覆盖CMD指定的内容并且附加到ENTRYPOINT
    命令最后作为其参数使用

    Dockerfile文件中也可以存在多个此指令,但仅有最后一个生效!

    在docker run时,使用--entrypoint string选项传递的命令 可以覆盖Dockerfile中
    定义的ENTRYPOINT指令

    如何让Nginx配置文件接收参数

    创建一个脚本:

    #!/bin/bash
    #
    cat > /etc/nginx/conf.d/www.conf <<EOF
     server {
            server_name ${HOSTNAME};
            listen ${IP:-0.0.0.0}:${PORT:-80};
            root ${ROOT:-/web/html};
    }
    EOF
    exec "$@"
    chmod +x nginx-conf.sh

    Dockerfile文件:

    FROM xxx
    ENV ROOT='/web/html/'
    ADD index.html ${ROOT}
    ADD nginx-conf.sh /bin/nginx-conf.sh
    CMD ["/usr/sbin/nginx","-g","daemon off;"]
    ENTRYPOINT ["/bin/nginx-conf.sh"]
    docker run --name b1 --rm -P -e "PORT=8080" [镜像ID]

    注意:必须使用双引号!!!
    ................................................................................

    12 USER命令:

    用于指定运行image时的或运行Dockerfile中的任何RUN,CMD或ENTRYPOINT
    指令指定的程序时的用户名或UID

    默认情况下,container的运行身份为root

    格式:
    USER <UID>|<UserName>

    需要注意的是<UID>可以为任意数字,但实践中其必须为/etc/passwd中某用户的有效
    UID否则docker run命令将运行失败!

    必须要在容器中的/etc/passwd文件中个存在

    ....................................................................

    13 HEALTHCHECK

    健康状态监测
    HEALTHCHECK NONE --不要做监测

    常用选项:
    --interval=DURATION 默认30秒 --多长时间监测一次
    --timeout=DURATION 默认30秒 --监测超时时间
    --start-period=DURATION --当docker容器启动后,延迟多长时间才健康检查
    默认0秒
    --retries=N 默认3次
    默认检查多少次在认为失败

    响应值:
    0--成功
    1--失败
    2--自定义

    应用示例:

    HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit1

    Dockerfile中应用:

    HEALTHCHECK --start-period=3s CMD wget -O - -q http://{IP:-0.0.0.0}:${PORT:-80}/

    也可以在docker run中定义:

    --health-cmd string            
    --health-interval duration      
    --health-retries int           
    --health-start-period duration  
    --health-timeout duration   

    .................................................................

    14 SHELL指令:

    ["cmd","/S","/C"] --windons

    ...........................................................

    15 STOPSIGNAL命令:

    STOPSIGNAL 信号名称

    定义停止命令的信号!

    SIGKILL --9信号

    .............................................................

    16 ARG参数:

    用于docker build 的过程中使用

    可以被--buil-arg当做参数传递过来!
    具体应用:

    ARG auther=tim
    LABLE maintainer=${auther}
    docker build --build-arg auther=tom -t xxx ./

    在dockerfile中存在的arg变量,如果在docker build 时也
    设置了--build-arg变量,这样最终以命令行界面的变量值为
    最终值!
    .................................................................

    17 ONBUILD

    用于在dockerfile中定义一个触发器
    dockerfile用于build映像文件,此映像文件亦可作为base image被另一个
    dockerfile用作from指定的参数,并以之构建新的影响文件

    在后面的这个dockerfile中的from指定在build过程中被执行时,将会触发
    创建其base image的dockerfile文件的ONBUILD指定定义的触发器

    格式:
    ONBUILD 要执行的Dockerfile指令

    尽管任何指令都可注册成为触发器指令,但ONBUILD不能自我嵌套
    且不会触发from和maintainer指令

    使用包含onbuild指定的dockerfile构建的镜像应该使用特殊的标签
    例如ruby:2.0-onbuild

    在onbuild指令中使用add或copy指令硬格外小心,因为构建过程的上下文
    在缺少指定的源文件时会失败!

    会在别人引用这个镜像时执行!并不会在首次build过程执行

    上一篇:linux下安装boost库的完整步骤记录
    下一篇:详解在Linux中清空或删除大文件内容的5种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    Dockerfile中常用命令汇总 Dockerfile,中,常用,命令,汇总,