Dockerfile:运行本地安装脚本的最佳方式?

我有一个Yocto Linux工具链安装程序脚本toolchain.sh 。 如果我运行这个,它将安装一堆交叉编译器到/opt 。 什么是我可以做一个预先形成的docker形象的最好办法? 到目前为止,我已经这样做了:

 ADD ./toolchain.sh /opt RUN yes | /opt/toolchain.sh RUN rm -f /opt/toolchain.sh 

这似乎工作,但似乎效率低下,因为现在我的形象有安装程序和解压缩的工具链占用更多的空间。

有没有办法做到这一点,而不占用不必要的空间?

限制你的图层:

 ADD ./toolchain.sh /opt RUN yes | /opt/toolchain.sh && \ rm -f /opt/toolchain.sh 

这可以确保您不会为toolchain.sh创build一个额外的图层,因为您将删除它,它只会为您的Docker图像创build额外的大小。

如果你好奇的话,那就是为什么人们不要在dockerfiles中使用几个运行语句,而是用&& \来创build巨大的“单线程”,并且为了更好的可读性而尝试将它们分开。

除此之外,你做的是完全有效的,为dockerdevise – 没有什么可担心的。