phanコンテナイメージを作った
きっかけ
https://packagist.org/packages/phan/phan
こーゆーのでいいんだよ、こーゆーので… pic.twitter.com/PjBb3bq1PS
— っどさん (@tadsan) 2019年11月29日
- @tadsanさんがphan/phanのイメージを作っていた
- 初めイメージに詰める方式で作っていて、途中でbind-mount方式に切り替えていた
- ので、勝手にイメージに詰める方式を引き継いだ
作ったイメージ
Dockerfile
FROM php:7.3-cli-alpine AS work # ---------------------------------------- # install composer # ---------------------------------------- ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /.composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # ---------------------------------------- # install build-dependencies # ---------------------------------------- RUN apk add --update-cache --no-cache --virtual=.build-dependencies ${PHPIZE_DEPS} # ---------------------------------------- # install php extensions # ---------------------------------------- RUN pecl install ast # ---------------------------------------- # install phan # ---------------------------------------- RUN composer global require phan/phan # ---------------------------------------- # artifact # ---------------------------------------- FROM php:7.3-cli-alpine ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /.composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY --from=work /.composer/vendor /.composer/vendor COPY --from=work /usr/local/lib/php/extensions /usr/local/lib/php/extensions RUN docker-php-ext-enable ast WORKDIR /app ENTRYPOINT ["/.composer/vendor/phan/phan/phan"]
学び
- マルチステージビルド
- composerは
COPY --from=composer:<tag> /usr/bin/composer /usr/bin/composer
で入れるのがコンテナ時代らしくて良い気がする - PHP拡張が必要な場合のマルチステージビルド
/usr/local/lib/php/extensions
を丸っとコピーすればいいみたい
- composerは
- いつも雰囲気で書いていた部分の理解
pecl install
やdocker-php-ext-enable
- ビルド依存のインストール
${PHPIZE_DEPS}
を使えば自前でいっぱい書かなくて済む- インストールしたバッチに名前をつけておいて、あとでまとめて掃除できる
- 今回はマルチステージビルドなので掃除してないけど