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?