Dockerの multi-stage builds を使ってみた
背景
Node.jsで生成した生成したテキストファイルをphpで扱いたい時があった。 手元の環境にphpとNode.jsを入れたくない(&他の開発者も扱いやすくしたい)ので、コンテナで実行することにした。 公式のphpイメージにNode.jsを入れるよりもステージ間で成果物をやり取りできたほうが嬉しいので、multi-stage buildsを試してみた。
やったこと
最初は直列に書いてみたがうまく行かなかった。 FROM命令でステージが初期化されてしまうため、ファイルを引き継げないと思われる。
The FROM instruction initializes a new build stage and sets the Base Image for subsequent instructions. docs.docker.com
下記ドキュメントに書いてあるとおり、COPY --from
を用いてステージを指定することでそのイメージ上で作られたファイルを参照できる。
docs.docker.com
これでステージ間での受け渡しができた。
FROM node:latest AS node ADD . /hoge WORKDIR /hoge RUN npm -v RUN touch test.txt RUN npm -v >> test.txt FROM php:latest COPY --from=node /hoge/test.txt /fuga/test.txt WORKDIR /fuga CMD ls -la && cat test.txt