2017-07-27 175 views
0

我有一個Yocto Linux工具鏈安裝程序腳本toolchain.sh。如果我運行它,它將安裝一堆交叉編譯器到/opt。對於預先製作的碼頭圖像,我可以做到這一點的最佳方式是什麼?到目前爲止,我已經做到了這一點:Dockerfile:運行本地安裝程序腳本的最佳方式?

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

這似乎是工作,但因爲現在我的形象既有安裝和未包裝的工具鏈佔用更多的空間,這似乎效率不高。

有沒有辦法做到這一點,而不佔用不必要的空間?

回答

1

限制圖層:

ADD ./toolchain.sh /opt 

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

這可以確保,你不爲toolchain.sh創建一個額外層,因爲你刪除它,它只是爲你的搬運工圖像創建額外的大小。

如果您很好奇,那就是爲什麼人們在dockerfiles中不使用多個運行語句,而是使用&& \創建巨大的「單線程」,並嘗試將它們分開以提高可讀性。

除此之外,你做什麼是完全有效的,併爲碼頭設計 - 沒有什麼可擔心的。