koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

PHP5時代のアプリケーションを docker-compose up した時のメモ

Laravel docker-compose up とかググるとそれっぽい構成が書かれた記事がヒットする。

だがそれでは太古の昔の、たとえばLaravel5のアプリケーションは動作しない。いつだって太古のアプリケーションを動作させたいという需要はあるものだ。最近も2020年のタイムスタンプでWindows10にVB6の開発環境を構築するには? のようなタイトルの記事を見かけて「VB6すげー」と思ったものだ。それに比べたらPHP5なんてまだまだ若造よ。

さて、今どきのPHP開発環境を作ろうぜ! 記事ではアプリケーションコンテナのベースイメージに php:7.x-fpm-xxx が使われていることが多い。

「じゃぁそのバージョンを5系にすれば動くでしょ」と試してもなんだか難しかった。どうにも依存関係のパッケージが見つからない(php-mcryptとか)。

動かしたいバージョンが現役だったころのバージョンのディストリビューションのイメージをベースに構築すると、とりあえずは太古のアプリケーションが動作するイメージができた。他のコンテナや docker-compose.yml の構成はそれっぽい構成を参考にすればよい。

自分の手元のDockerfileはこんな感じになった。

FROM centos:centos7
# CentOS7のyumリポジトリのPHPのバージョンは5.4。
# $ php --version
# PHP 5.4.16 (cli) (built: Apr  1 2020 04:07:17) 

# パッケージは精査していない。この辺使っていたよなー? を入れただけ。
# 一応 https://readouble.com/laravel/5.0/ja/installation.html のサーバー要件は意識した。
RUN yum install -y epel-release \
    && yum install -y php \
        php-cli \
        php-common \
        php-devel \
        php-fpm \
        php-gd \
        php-mbstring \
        php-mcrypt \
        php-mysql \
        php-pdo \
        php-xml \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

# アプリケーションのコードをコピーして依存関係も入れておいた。
WORKDIR /var/www/html
COPY ./ ./
RUN composer install

# 既定の設定を上書きしたいならする。
COPY ./php.ini /etc/php.ini
# 既定の設定では localhost からのみ接続できるように構成されているので、他のコンテナから接続できるように設定する。
COPY ./www.conf /etc/php-fpm.d/www.conf

EXPOSE 9000
CMD ["php-fpm"]

www.conf はデフォルトからこの辺りを変えた。 (ローカルホスト以外もリスニング、ローカルホスト以外からも接続を許可する、ステータス表示を有効にする)

--- www.conf.org
+++ www.conf
@@ -11,3 +11,3 @@
 ; Note: This value is mandatory.
-listen = 127.0.0.1:9000
+listen = 9000
 
@@ -23,3 +23,3 @@
 ; Default Value: any
-listen.allowed_clients = 127.0.0.1
+;listen.allowed_clients = 127.0.0.1
 
@@ -120,3 +120,3 @@
 ; Default Value: not set 
-;pm.status_path = /status
+pm.status_path = /status

イメージのサイズ? 多分でかい! 500MBくらいあった。動かすのが目的なのででかくてもいい。こうして浪費するためにPCを新調するときににSSD1TBを選んだのだ。

単に動かしたいだけならPHPもNginxもMySQLも全部入りのコンテナ1つでよいのだろうけれど、今年の抱負に docker-compose する、があるので試せて丁度よかった。