私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

PHP 5.3 プログラムの保守環境を1分で用意する

オトナの事情で PHP 5.3 系のシステムなんてものを保守する必要に迫られて DockerHub を漁ってたんですが、流石にサポート切れのバージョンはオフィシャルは勿論、草の根ベースでもなかなか厳しいですな。そんな中、なんとかちょうど良さげなのがあったので備忘録を。こいつです↓

hub.docker.com

Alpine ベースなので貧弱貧弱ゥな鯖でもサクサク動いて助かります(EC2 t3.nano で確認)。色々種類があるのですが、最初からよく使う PHP モジュールが同梱された Apache2 版の cespi/php-5.3:modules-apache が良さげ。Dockerfile の公開は無いので history をざっと見たけど、素性も特に悪くなさそう。以下、docker run するまでの簡単な例です。

まず、作業ディレクトリを作って PHP ファイルをデプロイ。

$ mkdir -p /foo/bar/htdocs
$ cat <<EOS > /foo/bar/htdocs/info.php
<?php
phpinfo();
EOS

あとは、そのディレクトリを指定してコンテナを起動するだけ。

$ docker container run \
--rm -itd \
-p 8000:80 -v "/foo/bar/htdocs:/var/www/htdocs" \
-e "APACHE_DOCUMENT_ROOT=/foo/bar/htdocs" \
cespi/php-5.3:modules-apache-latest

curl http://localhost:8000/info.php などとすれば動作確認できます。Cake1.2 のアプリという、目眩がしそうな古いプログラムを稼働させて見ましたが問題無いようです。尚、PHP の設定を調整したい場合は、/foo/bar/php.ini を作っておいて、パラメタに

-v /foo/bar/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro

を指定してやれば OK です。楽ちん!

※ちなみに用意されている PHP モジュールですが、コンテナの中に入って確認したところ以下のとおりでした。

# php -m
[PHP Modules]
apc
bcmath
Core
ctype
curl
date
dom
ereg
fileinfo
filter
ftp
gd
hash
iconv
json
ldap
libxml
mbstring
mcrypt
memcache
memcached
mysql
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
soap
SPL
SQLite
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib

[Zend Modules]