我有一个Yocto Linux工具链安装程序脚本toolchain.sh
。如果我运行它,它会将一堆交叉编译器安装到/opt
。对于预先制作的泊坞窗图像,我能做到这一点的最佳方法是什么?到目前为止,我已经做到了这一点:
ADD ./toolchain.sh /opt
RUN yes | /opt/toolchain.sh
RUN rm -f /opt/toolchain.sh
这似乎有效,但似乎效率低下,因为现在我的图像同时安装程序和未打包的工具链占用更多空间。
有没有办法在不占用不必要空间的情况下做到这一点?
答案 0 :(得分:1)
限制图层:
ADD ./toolchain.sh /opt
RUN yes | /opt/toolchain.sh && \
rm -f /opt/toolchain.sh
这可以确保您不会为toolchain.sh创建额外的图层,因为您将删除它,它只会为您的docker图像创建额外的大小。
如果你很好奇,那就是为什么人们不在dockerfiles中使用多个run-statement,而是用&& \
创建巨大的“one liners”,并尝试将它们分开以提高可读性。
除此之外,你所做的是完全有效的并且是为码头工人设计的 - 没有什么可担心的。