002-Dockerfile-RUN

语法

语法 1

RUN (shell 表单格式,该命令在 shell 中运行,默认情况下在 Linux 中是: /bin/sh -c, 在 Windows 中是: cmd /S /C)

语法 2

RUN ["executable", "param1", "param2"] (EXEC 形式)

作用

RUN 指令将在当前镜像之上的新图层中执行任何任命并提交结果。生成的提交镜像将用于下一步 Dockerfile;

分层 RUN 指令和生成提交符合 Docker 的核心概念,其中提交操作很廉价,并且可以从镜像历史中的任何点创建容器,就像源代码控制一样;

EXEC 形式能够避免 shell 改写地址,RUN 可使用不包含指定 shell 命令的镜像;

可以使用 SHELL 命令更改 shell 表单的默认 shell;

在 shell 形式中,你可以使用 \ (反斜杠)将单个 RUN 指令继续到下一行。

示例

示例 1 - shell 格式使用 \ 将单个 RUN 指令继续到下一行

RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'

这两种书写形式是等效的。

注意

注意 1

要使用不同于"/bin/sh"的shell,请使用传入所需shell的exec表单。例如:RUN ["/bin/bash", “-c”, “echo hello”]

注意 2

exec 表单被解析为 JSON 数组,这意味着你必须使用双引号(")来围绕单词而不是单引号

注意 3

与 shell 表单不同,exec 表单不会调用shell。这意味着不会发生正常的shell处理。例如:RUN [“echo”, " H O M E " ] 不 会 对 变 量 进 行 替 换 HOME"]不会对变量进行替换 HOME"]HOME。如果你想要shell处理,那么要么使用shell表单,要么直接直接执行shell,例如: RUN [“sh”, “-c”, “echo $HOME”]。当使用exec 表单直接执行shell时(如shell表单的情况),他是执行环境变量扩展的shell,而不是docker。

注意 4

在 JSON 表单中,必须转义反斜杠。这在反斜杠是路径分隔符的 Windows 上尤为重要。由于不是有效的 JSON,一下行将被视为shell表达,并以意外方式失败:RUN [“c:\windows\system32\tasklist.exe”] 此示例的正确语法是:RUN [“c:\windows\system32\tasklist.exe”]

注意 5

RUN 在下一次构建期间,指令的缓存不会自动失效。类似指令的缓存 RUN apt-get dist-upgrade -y 将在下一次构建期间重用。例如,RUN 可以通过使用 --no-cache 标志使指令的高速缓存无效 docker build --no-cach

注意 6

ADD 指令可以使 RUN 指令的告诉缓存无效,请参考ADD

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值