「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での
user
group` ディレクティブが注意される。「superユーザーで実行しない限り効かないよ」と。無指定にすればlocalでの起動に失敗するので、今の所「書いておく、herokuに怒られているけど仕方ない」みたいな割り切り run.sh
に乗せている内容を、どうにかDockerfileに持ってこれないものか。理由としては、ベースイメージのCMDの中で実行される内容が肥大化すると、自分のDockerfileに細やかな処理が書きにくくなりそうじゃない?と思うから。
はぁ、それにしても「同じイメージをそのまま使える」のマジで便利。すごいと思う、革命や・・・ 前回apacheでうまく行かなかった理由は相変わらず謎のまま〜〜