Docker Multi-stage build
Docker Multi-stage buildとは、Dockerfileにおける FROM 句を複数回呼び出すことによって、複数のビルド(1ビルドの単位をステージと呼ぶ)を展開できる機能のことである(バージョン17.05より利用可能)。 こうすると、ある特定のステージから別のステージに対してファイルをコピーできるようになり、ソースコードのコンパイル用ステージとコンパイル済みバイナリの実行用ステージなどを分けることで、(ビルド用に入れた依存関係が成果物のDockerイメージに残らないため)イメージサイズを小さくできる効果がある。
以下はそれぞれ異なる環境(依存関係)が必要
compileやbuildしてartifactsを生成する
npmだとdevDependenciesをinstallしてbuildしたり
実行環境
アプリケーションの実行に必要
プラットフォーム向けのネイティブファイルが生成されていればコンパイルする必要はない
無理やりまとめると1つのdocker imageが肥大化し、ビルド時間も伸びてしまう