TL;DR
コードだけ欲しい方はこちらを参照。テンプレート化してあるので、そのままお使いいただけます。
はじめに
今回の記事は、こちらの記事を参考にさせていただいた際にちょっと気になった点を修正したものを載せただけです。
仕組みとか詳しく説明いただいています。アリガタヤ
何が気になったのか
インストーラがアップデートしてハッシュ値が変わると使えなくなるという問題。
https://getcomposer.org/download/ に書かれているクイックインストールスクリプトをそのままDockerfileに記述してあるためですね。
ダウンロードページの方にも
WARNING: Please do not redistribute the install code. It will change with every version of the installer. Instead, please link to this page or check how to install Composer programmatically.
とあるので、まあ流石によろしくはない。
対応策
公式が用意してくれています。
https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md
これをdocker build時に実行するだけ。
\project
├ app/<Laravel Project>
├ php
│ ├ Dockerfile
│ ├ composer-init.sh
│ └ php.ini
├ nginx
│ └ default.conf
└ docker-compose.yml
FROM php:7.2-fpm
RUN apt-get update \
&& apt-get install -y wget zlib1g-dev mariadb-client \
&& docker-php-ext-install zip pdo_mysql
COPY php.ini /usr/local/etc/php/
COPY composer-init.sh ./
#Composer install
RUN chmod -R 755 ./composer-init.sh
RUN ./composer-init.sh
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
シェルスクリプト内でwgetしているので、apt-getでインストールしています。
あとはmysqlのパスワードやらなんやらを.env
に切り出した程度で、ほとんど元の記事を参考にさせていただいています
課題(?)
本来Dockerはいつでもどこでも同じ環境を構築するべきなので、composer自体のバージョン管理とかも必要だと思いますが、一旦そこは目を瞑りました;;
正確にバージョン指定したい方は、下のような感じでハッシュを指定して直接持ってきてインストールしましょう。
wget https://raw.githubusercontent.com/composer/getcomposer.org/76a7060ccb93902cd7576b67264ad91c8a2700e2/web/installer -O - -q | php -- --quiet
おわり
本題と関係ないんですけど、githubのtemplate
って便利ですよね。
新しいプロダクト作ろうとしたときのイニシャルコストを最小限に抑えられるので、普段使いしそうなフレームワークは大体テンプレート化しています。
(といっても、自分の周りで使っている方を見かけない……)