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
就越好。
当一个 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 的更好方法是什么?