docker-compose でPHPのマルチバージョン環境を

作りたかったわけです。
色々と苦戦したので、メモとして残します。

  • DockerHubで提供されている公式のPHPイメージを使う
  • 見れればいいのでwebサーバはapache
  • PHPのエクステンションを追加する

イメージ

イメージ名は php<version>-apache で統一されています。
最新は7.3、 一番古いものは5.3でした。

apachehttpd.conf

php5.5~

ドキュメントルートを変更したい場合などあると思います。
基本的には以下のようにdocker-compose.ymlで000-default.confをマウントしてしまえば大丈夫です。

services:
  php55:
    volumes:
      - ./000-default.conf:/etc/apache2/sites-available/000-default.conf

~php5.4

docker-compose.yml でマウントしても反映されません。
サボらずにDockerfile書きましょう。

なお、php5.4では DirectoryIndex がデフォルトでOff、php5.3ではデフォルトでOnのようです。

OSへのパッケージインストール

phpのイメージのOSはどうやらDeb系のようです。

php5.6~

Dockerfile 内でapt-getするだけです。

RUN apt-get update && apt-get install -y libxslt1-dev

~php5.5

OSが古いようで、そのままではapt-get updateできません。
公開鍵を追加したり、source.listをいじる必要があります。

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010 \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9D6D8F6BC857C906 \
    && echo "deb http://deb.debian.org/debian jessie main" > /etc/apt/sources.list \
    && echo "deb http://security.debian.org jessie/updates main" >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y \
        libxslt1-dev

参考:

bigbuddha.hatenablog.jp

qiita.com

PHPエクステンションの追加

php5.4~

公式サイトにもありますが、Dockerfileに以下のように書くだけで、簡単に追加できます。

RUN docker-php-ext-configure xsl --with-xsl=/usr/include
RUN docker-php-ext-install xsl

php5.3

docker-php-ext-xxx系のスクリプトが使えません。
自分でビルドする必要があります。

まず、phpのソースファイルを落としてくる必要があります。
$PHP_VERSION には落としたいphpのバージョンを入れてください。

RUN curl -SL "http://php.net/get/php-$PHP_VERSION.tar.bz2/from/this/mirror" -o php.tar.bz2 \
    && mkdir -p /usr/src/php \
    && tar -xf php.tar.bz2 -C /usr/src/php --strip-components=1

次に、エクステンションのMakefileを作成します。

RUN cd /usr/src/php/ext/xsl \
    && phpize \
    && ./configure

そして、ビルドをして.soファイルを出力します。

RUN cd /usr/src/php/ext/xsl \
    && make \
    && make install

最後に、php.iniで.soファイルの場所を読み込ませます。

php.ini

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xsl.so

Dockerfile

COPY ./php.ini /usr/local/lib/php.ini

まとめ

なるべくphp5.3は使わない方がいいです・・・環境作るのも大変。