Dockerfile マルチステージビルド
ステージ=FROM行から次のFROMの前の行まで
asで名前をつけると、次回以降のFROMやCOPY命令のコピー元として参照可
code:Dockerfile
FROM hoge:1.0 as hg
...
FROM hg
...
FROM fuga:1.1
COPY --from=hg /piyo /piyo
みたいな
docker buile --target hgで特定ステージをビルドしたり、
docker-compose.ymlで特定ステージのイメージを利用する指定ができる。
マルチステージビルド使用例でよくあるのはGoアプリケーションの
ビルドをするステージ
ビルドしたバイナリだけを軽いイメージ(scratchやalpine)に配置するステージ
というものだが、コンパイルしないような言語でも
ローカルの開発では(ソースの編集をすぐ反映するために)カレントディレクトリをマウントするので、Gemfileやpackage.jsonのみをCOPYするステージ
本番用には、ソースコードすべてをCOPYするステージ
みたいな分け方ができる。
マルチステージビルドがリリースされてから、同じアプリケーションの環境違いでDockerfileを分ける必要はなくなった。
(なんなら全然違うアプリを1つのDockerfileに詰めることもできる)
https://docs.docker.com/develop/develop-images/multistage-build/
#Docker