Dockerfile.1
执行多个RUN
:
FROM busybox
RUN echo This is the A > a
RUN echo This is the B > b
RUN echo This is the C > c
Dockerfile.2
加入他们:
FROM busybox
RUN echo This is the A > a &&\
echo This is the B > b &&\
echo This is the C > c
每个RUN
层都创建一个层,因此我一直认为较少的层会更好,因此Dockerfile.2
也更好。
当a RUN
删除前一个RUN
(即yum install nano && yum clean all
)添加的内容时,这显然是正确的,但是在每个都RUN
添加了内容的情况下,我们需要考虑以下几点:
层应该只是在前一层之上添加一个差异,因此如果后一层没有删除在前一层中添加的内容,则这两种方法之间应该没有太多的磁盘空间节省优势...
层是从Docker Hub并行拉出的,因此
Dockerfile.1
,尽管可能稍大一些,但理论上可以更快地下载。如果添加第4句(即
echo This is the D > d
)并在本地重建,Dockerfile.1
由于使用了缓存,构建起来会更快,但是Dockerfile.2
必须再次运行所有4条命令。
所以,问题是:哪种更好的方式来制作Dockerfile?