zoukankan      html  css  js  c++  java
  • Dockfile基本语法

    FROM

    功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么可写为:FROM scratch。
    接下来所写的指令将作为镜像的第一层开始。
    格式:

    FROM <image>
    FROM <image>:<tag>
    FROM <image>:<digest> 
    

    默认值为latest

    MAINTAINER

    指定作者
    格式:

    MAINTAINER <name>
    

    ENV

    为容器设定环境变量

    ENV <key> <value>  设置一个
    ENV <key>=<value>   设置多个
    

    ADD

    复制,把文件复制到镜像中(Dockfile所在目录为根目录),类似于scp

    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"]
    

    路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
    可以是一个本地文件或者是一个本地压缩文件,还可以是一个url
    如果把写成一个url,那么ADD就类似于wget命令
    写法:

    ADD ares t1/ 
    ADD ares /t1
    ADD http://example.com/ares /
    

    若src是个目录,则会把目录下所有文件复制到容器,不会复制目录

    COPY

    复制命令

    COPY <src>... <dest>
    COPY ["<src>",... "<dest>"]
    

    COPY的只能是本地文件,其他用法与ADD一致

    VOLUME

    挂载功能,将本地目录或者其他容器内得目录挂在到这个容器中,一般挂载数据文件

    VOLUME ["/var/log/"]
    VOLUME /var/log
    VOLUME /var/log /data
    

    任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化,容器运行时可通过-v覆盖配置

    USER

    设置启动容器的用户,可以是用户名或UID

    USER daemo
    USER UID
    

    如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

    WORKDIR

    WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在, WORKDIR 会自动建立目录。

    WORKDIR <工作目录路径>
    

    EXPOSE

    声明端口,暴漏容器运行时的监听端口给外部

    EXPOSE <端口1> [<端口2>...]
    

    运行时并不会因为这个声明应用就会开启这个端口的服务.在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    RUN

    运行指定的命令

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

    第一种后边直接跟shell命令
    在linux操作系统上默认 /bin/sh -c
    在windows操作系统上默认 cmd /S /C
    第二种是类似于函数调用。
    RUN书写时的换行符是\,多行命令不要写多个RUN,使用&&连接

    CMD

    容器启动时要运行的命令

    CMD ["executable","param1","param2"]
    CMD ["param1","param2"]
    CMD command param1 param2
    

    只可以使用双引号!

    CMD echo $HOME实际会被翻译成CMD [ "sh", "-c", "echo $HOME" ]
    

    Docker 不是虚拟机,容器中的应用都应该以前台执行!

    CMD service nginx start命令应该写为CMD ["nginx", "-g", "daemon off;"]
    

    RUN是构件容器时就运行的命令以及提交运行结果;
    CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子;
    可写多个,只有最后一个生效

    ENTRYPOINT

    功能是启动时的默认命令,不可被 docker run 提供的参数覆盖

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

    如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
    示例:

    CMD ["-f","/var/log/message"]
    ENTRYPOINT ["tail"]
    会在启动的时候执行tail -f /var/log/message
    

    ARG

    构建参数

    ARG <参数名>[=<默认值>]
    

    ARG命令定义了一个变量,在docker build创建镜像的时候,使用 –build-arg =来指定参数

    ONBUILD

    ONBUILD <其它指令>
    

    ONBUILD 是一个特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。

    STOPSIGNAL

    当容器推出时给系统发送什么样的指令

    STOPSIGNAL signal
    

    HEALTHCHECK

    容器健康状况检查命令,告诉 Docker 应该如何进行判断容器的状态是否正常

    HEALTHCHECK [OPTIONS] CMD command :设置检查容器健康状况的命令
    HEALTHCHECK NONE :如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
    

    [OPTIONS]的选项支持以下三中选项:
    --interval=DURATION 两次检查默认的时间间隔,默认为30秒
    --timeout=DURATION 健康检查命令运行超时时长,默认30秒
    --retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态unhealthy,默认次数是3
    HEALTHCHECK 只可以出现一次,如果写了多个,只有最后一个生效。
    CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:
    0: success - 表示容器是健康的
    1: unhealthy - 表示容器已经不能工作了
    2: reserved - 保留值
    示例:

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

    健康检查命令是:curl -f http://localhost/ || exit 1
    两次检查的间隔时间是5秒
    命令超时时间为3秒

  • 相关阅读:
    一句话搞定qt4 开发环境
    一句话随笔.....
    es6学习笔记(二)
    Vue学习笔记(一)
    es6学习笔记(一)
    Java中的一些基础概念
    你了解Java中String的substring函数吗?
    Ajax请求与浏览器缓存
    QCon杭州2012技术开发大会感受
    为什么选择使用Sass而不是Less?
  • 原文地址:https://www.cnblogs.com/aresxin/p/Dockfile-ji-ben-yu-fa.html
Copyright © 2011-2022 走看看