この記事は Docker Advent Calendar 2019 3日目の記事です。
抜けていたので急遽書きます。
背景
PHPやRuby、Node.jsを同一コンテナ内で管理したいときありますよね。
Laravel + VueやRails + React等。
そんなときDockerfileで個別にNode.jsをインストールしている記事を時々見かけます。
そんなあなたにマルチステージビルドがおすすめです!
DockerfileでPHPコンテナとNode.jsコンテナをマルチステージビルドで構築する例
FROM node:12.13.0-alpine as node
FROM php:7.3-fpm-alpine
## PDOなどインストールは省略
WORKDIR /var/www/html
# マルチステージビルドでphp-fpmコンテナにnodeとnpmを追加する
COPY --from=node /usr/local/bin/node /usr/local/bin/
COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/
RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
Node.jsコンテナからnodeとnpmのバイナリをコピーし、シンボリックリンクを貼るだけ!
簡単でお手軽で早いです!
参考
Nuxt.js2.10とLaravel(6.0)を同一ディレクトリで動かすnuxt-laravelをDockerで環境構築
明日は@mei_9961さんの記事です。