herokuでphp動かすためのDockerイメージを組んだ

「herokuでDocker使えるよ」って言うから試そうとしたらハマった - 大好き!にちようび というものを書いたじゃないですか。 あれ以来、「一旦Container registryでやるの諦めてアプリケーションだけ書いちゃおう・・・」となり放置、さらに他のことに浮気をしたりが重なりアプリケーション自体も書いていなかったのですが。

他のことが消化されたり、というのもあったので「久々に作るかー」となり起動したのでした。

で、結論、できた。

ということで、かなり参考にさせていただきつつphp72のものを組めた。今の所、php:7.2-fpm-alpineをベースとしてnginxを足した感じ。

o0ho0h/heroku-php72-fpm - Docker Hub

これを使って、例えば「PostgreSQLとxDebugを足したものを作りたいな」となったら、次のようなDockerfileを用意すれば立ち上がるしHerokuに載せられる。

FROM o0ho0h/heroku-php72-fpm
RUN apk add --no-cache \
    $PHPIZE_DEPS \
    postgresql-dev \
    && docker-php-ext-install pdo pdo_pgsql \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug

ENV COMPOSER_ALLOW_SUPERUSER=1
COPY ./webapp /var/www/html
WORKDIR /var/www/html
RUN php composer install -o

構成イメージはこんな感じだ。

$ tree -L 2
.
├── Dockerfile
├── docker-compose.yml
└── webapp
    ├── composer
    ├── composer.json
    ├── composer.lock
    ├── index.php
    ├── public
    ├── src
    └── vendor

composerは本体をgitに入れて管理させちゃっても良いか、と思ったので入れてある。デプロイ周りの整え方によっては、composer/composer - Docker Hubを使っても良いかもしれない。

実際のアプリケーションを作ってみながらコチラも整えていこう、という気持ちでいるのでまずは「動くところまで」という着地。最終的には、気になっているところをちゃんと取り除きたい。
いま気持ち悪いのは以下

  • rootのままになっている。 docker-nginx-php-fpm-heroku を見ると ADDUSER はしているのだが、USER nonroot とはしておらず、さて・・?という疑問が。
  • 近い問題で、herokuでの起動時にfpmでの user group` ディレクティブが注意される。「superユーザーで実行しない限り効かないよ」と。無指定にすればlocalでの起動に失敗するので、今の所「書いておく、herokuに怒られているけど仕方ない」みたいな割り切り
  • run.sh に乗せている内容を、どうにかDockerfileに持ってこれないものか。理由としては、ベースイメージのCMDの中で実行される内容が肥大化すると、自分のDockerfileに細やかな処理が書きにくくなりそうじゃない?と思うから。

はぁ、それにしても「同じイメージをそのまま使える」のマジで便利。すごいと思う、革命や・・・ 前回apacheでうまく行かなかった理由は相変わらず謎のまま〜〜