是否有任何理由支持串联RUN指令而不是运行脚本?

当我创build一个Dockerfile来生成一个图像时,我有一些select,当涉及到安装和构build的东西。

我可以

RUN a && \ b && \ c 

要么

 COPY install.sh /install.sh RUN /install.sh 

其中install.sh

 a b c 

是否有任何实质性的理由支持另一种方法?

与其他答案相比,我通常更喜欢:

 RUN a && \ b && \ c 

主要的原因是立即清楚发生了什么事情。 如果你使用脚本,你已经有效地隐藏了代码。 为了让新用户了解正在发生的事情,他们现在需要在查看脚本之前find具有构build上下文的项目。

这是一个权衡,一旦事情变得太复杂,你应该重构成一个脚本。 但是,您可能更喜欢将脚本从已知位置curl而不是COPY它,以便Dockerfile保持独立。

 RUN a && b && C vs RUN install.sh 

从Docker的angular度来看,两种方法都是一样的。

然而,第二种方法(运行单个脚本并将所有内容都封装在内部)更清晰。 它允许更好地处理a,b,c和它们之间的依赖关系。 你也更新install.sh而不更新Dockerfile,保持Dockerfile简单。