美文网首页
Dockerfile 基本指令

Dockerfile 基本指令

作者: 赛亚人之神 | 来源:发表于2019-03-19 09:17 被阅读0次

1. RUN

  • 用于指定 docker build 过程中运行的程序,其可以是任何命令
  • Syntax
    • RUN <command>
    • RUN ["<executable", "<param1>", "<param2>"]
  • 第一种语法格式中,<command> 通常是一个 shell 命令,且以 /bin/sh -c 来运行它,这意味着此近程在容器中的 PID 不为 1,不能接收 Unix 信号,因此,当使用 docker stop <container> 命令停止容器时,此进程接收不到 SIGTERM 信号;
  • 第二种语法格式中的参数是一个 JSON 格式的数组,其中 <executable> 为要运行的命令,后面的 <paramN> 为传递给命令的选项或参数;然后此种格式指定的命令不会以 /bin/sh -c 来发起,因此常见的 shell 操作如变量替换以及通配符 ?,*等替换将不会进行;不过,如果要运行的命令依赖于 shell 特性的话,可以将其替换为类似下面的格式
RUN ["/bin/bash", "-c", "<executable>", "<param1>"]

2. CMD 指令

  • Syntax
    • CMD <command>
    • CMD ["<executable", "<param1>", "<param2>"]
    • CMD ["<param1>", "<param2>"]
  • 前两种语法格式的意义同 RUN
  • 第三种语法则用于 ENTRYPOINT 指令提供默认参数

3. ENTRYPOINT

  • 类似 CMD 指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序
  • CMD 不同的是,由 ENTRYPOINT 启动的程序不会被 docker run 命令行指定的参数所覆盖,而且,这些命令行参数会被当做参数传递给 ENTRYPOINT 指定的程序
    • 不过, docker run 命令的 --entrypoint 选项的参数可覆盖 ENTRYPOINT 指令指定的程序
  • Syntax
    • ENTRYPOINT <command>
    • ENTRYPOINT ["<executable>", "<param1>", "<param2>"]
  • docker run 命令传入的命令参数会覆盖 CMD 指令的内容并且附加到 ENTRYPOINT 命令最后作为其参数使用
  • Dockerfile 文件中也可以存在多个 ENTRYPOINT 指令,但仅有最后一个会生效

4. USER

  • 用于指定运行 image 时的或运行 Dockerfile 中任何 RUNCMDENTRYPOINT 指令指定的程序时的用户名或 UID
  • 默认情况下, container 的运行身份为 root 用户
  • Syntax
    • USER <UID> | <UserName>
    • 需要注意的是, <UID> 可以为任意数字,但实践中其必须为 /etc/passwd 中某用户的有效 UID,否则,docker run 命令将运行失败

4. HEALTHCHECK

  • Syntax

    • HEALTHCHECK [OPTIONS] CMD command,通过在容器中运行 command 命令检测容器健康状态
    • HEALTHCHECK NONE 禁用健康检查
  • options

    • --interval=DURATION(defatult: 30s) 检测时间间隔
    • --timeout=DURATION(defatult: 30s)
    • --start-period=DURATION(defatult: 0s) 开始等待时间,比如,主进程启动需要10秒钟,那么需要修改这个值,大于10s,避免程序启动就开始检测,而这时程序还不可用
    • --retryies=N(defatult: 3s),重试次数
  • command 的 exit status 表明容器的健康状态

    • 0: success
    • 1: unhealthy
    • 2: reserved - do not use this exit code (可以自己定义)
  • 例子(\ 表示换行)

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

wget -O - -q www.bauidu.com:这个命令可以把html打印到shell上

5. SHELL

如果不是 json 数组格式的指令,默认的 shell 在 Linux 是 ["/bin/sh", "-c"],在 Windows 是 ["cmd", "/S", "/C"]这里的指令用于运行程序默认要运行的 SHELL

  1. shell 指令在 Dockerfile 中必须使用 JSON 格式进行重写
  2. shell 指令可以出现多次,每个 shell 指令覆盖之前的 shell 指令,并且影响后续的指令

6. STOPSIGNAL
进程号id 为 1 的,可以接收 docker stop 命令,从而能够停止主进程,从而停止容器。如 stop 发送的是 15,signal 是无符号整型数字(必须匹配 kernal 的 syscall table),如 9 ,也可以是 SIGNAME,如 SIGKILL

  • Syntax
    • STOPSIGNAL signal

7. ARG
使用 ARG 指令可以在 docker build 过程中传值,使用 --build-arg <varname>=<value>,如果用户指定的构建参数在 Dockerfile 中未定义,构建会输出警告信息

  • Syntax
    • ARG <name>[=<default value>]

一个 Dockerfile 中可能包含多个 ARG 指令,一个 ARG 可能包含一个默认值。比如:
ARG version=1.14
ARG user=mageedu

8. ONBUILD

  • 用于在 Dockerfile 中定义一个触发器
  • Dockerfile用于 build 镜像文件,此镜像文件可以作为 base image 被另一个 Dockerfile 用做 FROM 指令的参数,并以只构建新的镜像文件
  • 在后面的这个 Dockerfile 中的 FROM 指令在 build 过程中被执行时,将会“触发”创建其 base imageDockerfile 文件中 ONBUILD 指令定义的触发器
  • Syntax
    • ONBUILD <INSTRUCTION>
  • 尽管任何指令都可以注册成为触发器指令,但 ONBUILD 不能自我嵌套,且不会触发 FROMMAINTAINER 指令
  • 使用包含 ONBUILD 指令的 Dockerfile 构建的镜像应该使用特殊的标签,例如 ruby:2.0-onbuild
  • ONBUILD 指令中使用 ADDCOPY 指令应该格外小心,因为新构建过程的上下文在缺少指定原文件时会失败

相关文章

  • Dockerfile基本指令

    https://docs.docker.com/develop/develop-images/dockerfile...

  • Dockerfile 基本指令

    FROM 基础镜像 Dockerfile 中第一条指令 推荐使用 alpline 版本作为基础镜像 RUN ...

  • Dockerfile 基本指令

    1. RUN 用于指定 docker build 过程中运行的程序,其可以是任何命令 SyntaxRUN RUN...

  • 使用dockerfile构建自己的镜像

    一、什么是dockerfile 二、Dockerfile基础指令 二、Dockerfile运行指令

  • Dockerfile指令详解

    Dockerfile指令详解 FROM 要么 要么 该FROM指令初始化一个新的构建阶段,并为后续指令设置 基本映...

  • 第八章:使用Docker创建镜像

    Dockerfile 基本结构 Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时...

  • Dockerfile使用

    Dockerfile 使用 Dockerfile 定义镜像,将指令进行保存,每条指令代表着一层构建操作,依赖指令创...

  • Dockerfile最佳实践

    Dockerfile 简介 Docker通过读取Dockerfile文件中的指令自动构建镜像。Dockerfile...

  • dockerfile

    在dockerfile dockerfile常用指令 FROM 指定base镜像MA...

  • docker-基础命令和使用案例

    Docker基础命令 Dockerfile指令 编写Dockerfile原则 1.减少镜像层:一次RUN指令形成新...

网友评论

      本文标题:Dockerfile 基本指令

      本文链接:https://www.haomeiwen.com/subject/acmwmqtx.html