Dockerfile - Multi-stage build 筆記

在專案開發時,通常會執行代碼檢查、單元測試、編譯、執行等等。 在 docker 還沒出現之前,這些流程都是在本機上跑 (版本 0),因為環境的不一致可能導致不同主機執行結果不相同。將這些流程步驟撰寫成 dockerfile 直接在容器裡執行就可以解決上述問題 (版本 1),但也衍伸出了新的問題。為了執行代碼檢查和編譯,下載了許多套件或是相依工具,造成映像檔肥大,很多套件或是相依工具在部署時是不需要的。 如果把這些步驟拆成兩個階段思考 (版本 2) 開發整合階段:代碼檢查、單元測試、編譯等等使用。 部署階段:跑起執行檔,將此兩階段寫成兩個 dockerfile,並且建構出兩個映像檔,只要拿後者映像檔去部署即可。 版本 2 成功解決了部署映像檔大小的問題,可是在必須維護兩個 dockerfile 還有中間流程所需的 script,Docker 17.05 所推出的 Multi-stage build 正好能解決此問題 (版本 3)。 以下則是 版本 0 進化到 版本 3 的過程及解釋。 ...

三月 1, 2021 · amikai