「herokuでDocker使えるよ」って言うから試そうとしたらハマった - 大好き!にちようび というものを書いたじゃないですか。 あれ以来、「一旦Container registryでやるの諦めてアプリケーションだけ書いちゃおう・・・」となり放置、さらに他のことに浮気をしたりが重なりアプリケーション自体も書いていなかったのですが。
他のことが消化されたり、というのもあったので「久々に作るかー」となり起動したのでした。
そして思い出したのは、herokuでDockerを動かしたくて動かせていないんだった・・・
— 今日も誰かのにちようび( クリスマス) (@o0h_) August 4, 2018
で、結論、できた。
- php72-apacheをベースにやろうとしていたけども
- ひとまず、何であれ「herokuで好きなPHP7を載せたコンテナが動くとはどういうことか」を知る必要があるな!と考え直し
- GitHub - ttskch/docker-nginx-php-fpm-heroku: Heroku Container Registry ready minimal image of Nginx + PHP-FPM on Alpine.をまずはそのまま使って、試してみて
- ・・・動くじゃん!!
ということで、かなり参考にさせていただきつつ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での
usergroup` ディレクティブが注意される。「superユーザーで実行しない限り効かないよ」と。無指定にすればlocalでの起動に失敗するので、今の所「書いておく、herokuに怒られているけど仕方ない」みたいな割り切り run.shに乗せている内容を、どうにかDockerfileに持ってこれないものか。理由としては、ベースイメージのCMDの中で実行される内容が肥大化すると、自分のDockerfileに細やかな処理が書きにくくなりそうじゃない?と思うから。
はぁ、それにしても「同じイメージをそのまま使える」のマジで便利。すごいと思う、革命や・・・ 前回apacheでうまく行かなかった理由は相変わらず謎のまま〜〜