有没有理由支持连接RUN指令而不是运行脚本?

时间:2015-09-30 00:16:14

标签: docker dockerfile

当我创建一个Dockerfile来生成图像时,我在安装和构建内容时有一些选择。

我能做到

RUN a && \
    b && \ 
    c

或者

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

install.sh

的位置
a
b
c

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

2 个答案:

答案 0 :(得分:2)

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

RUN a && \
    b && \ 
    c

主要原因是它立即清楚发生了什么。如果您改为使用脚本,则可以有效地隐藏代码。为了让新用户了解正在发生的事情,他们现在需要在查看脚本之前找到具有构建上下文的项目。

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

答案 1 :(得分:0)

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

从Docker的角度来看,两种方法都是相同的。

然而,第二种方法(运行单个脚本并将所有内容包装在引擎盖下)更清晰。它允许更好地处理管理a,b,c及其相互依赖关系。您还更新install.sh而不更新Dockerfile,保持Dockerfile简单。