我已经看到很多dockerfile在RUN语句中包含所有构建步骤,例如:

RUN echo "Hello" &&
    cd /tmp &&
    mv a.txt b.txt &&
    ...
    and so on...

我的问题是:用单个bash脚本替换这些指令有什么好处/缺点,该脚本可以使我突出显示语法,循环功能等?
就像是:
COPY ./script.sh /tmp
RUN  bash /tmp/script.sh

然后

#!/bin/bash

echo "hello" ;
cd /tmp ;
mv a.txt b.txt ;
...

谢谢!

最佳答案

主要区别在于,当您将bash脚本COPY到镜像中时,它将可以在正在运行的容器中进行检查,而RUN命令则更加不透明。将您的命令放在这样的文件中可能会因为其他原因而更易于管理:VCS历史记录中的更改会更加清晰,对于更长或更复杂的脚本,您可能会发现更容易使用脚本将其清晰地格式化单独的文件,而不是通过RUN命令嵌入到您的Dockerfile中。

否则,结果是相同的(在两种情况下,您都在执行相同的命令集),尽管COPYRUN将导致额外的图像层(仅是RUN本身)。

关于docker - dockerfile中的RUN和bash脚本有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46118498/

10-16 22:36