Featured image of post Symfonyのwebpack-encoreのためにdockerのmulti stage buildを使う

Symfonyのwebpack-encoreのためにdockerのmulti stage buildを使う

Twitter ツイート Hatena Bookmark ブックマーク

Symfonyを動かすコンテナを作るときにPHPだけの環境なら比較的に作りやすいです。
ただ、webpacke-encoreが絡んでくるとちょっとめんどくさい。
なのでmulti stage buildを利用してサクッと環境を作ってみました。

まずは普通にphpだけのコンテナ

自分はこんな感じにすることが多いです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FROM php:7.3-fpm-alpine

RUN apk add --update openssh libpng-dev libjpeg-turbo-dev libxml2-dev freetype-dev libpng-dev jpeg-dev libjpeg-turbo-dev autoconf g++ imagemagick-dev libtool make pcre-dev git postgresql-dev libzip-dev \
  && docker-php-ext-configure gd --with-jpeg-dir=/usr/lib/ --with-freetype-dir=/usr/lib/ \
  && docker-php-ext-install pdo pdo_mysql soap zip pcntl gd

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
  && php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
  && php composer-setup.php \
  && php -r "unlink('composer-setup.php');" \
  && mv composer.phar /usr/local/bin/composer


WORKDIR /app

nodeとmulti stage build

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
FROM node:12.19.0-alpine3.10 as node
FROM php:7.3-fpm-alpine

RUN apk add --update openssh libpng-dev libjpeg-turbo-dev libxml2-dev freetype-dev libpng-dev jpeg-dev libjpeg-turbo-dev autoconf g++ imagemagick-dev libtool make pcre-dev git postgresql-dev libzip-dev \
  && docker-php-ext-configure gd --with-jpeg-dir=/usr/lib/ --with-freetype-dir=/usr/lib/ \
  && docker-php-ext-install pdo pdo_mysql soap zip pcntl gd

COPY --from=node /usr/local/bin /usr/local/bin
COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/

WORKDIR /app

nodeのイメージも利用して必要なコマンドをコピーしてしまえばnpmとかも使えるようになります。

composerもmulti stage build的にする

ハッシュ値の問題もあるし、composerもコンテナを利用すると便利です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
FROM node:12.19.0-alpine3.10 as node
FROM php:7.3-fpm-alpine

RUN apk add --update openssh libpng-dev libjpeg-turbo-dev libxml2-dev freetype-dev libpng-dev jpeg-dev libjpeg-turbo-dev autoconf g++ imagemagick-dev libtool make pcre-dev git postgresql-dev libzip-dev \
  && docker-php-ext-configure gd --with-jpeg-dir=/usr/lib/ --with-freetype-dir=/usr/lib/ \
  && docker-php-ext-install pdo pdo_mysql soap zip pcntl gd

COPY --from=composer:1.10.17 /usr/bin/composer /usr/bin/composer
COPY --from=node /usr/local/bin /usr/local/bin
COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/

WORKDIR /app
comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。