カテゴリー
Linux

PHP 5.3 の Composer 環境を Docker で構築する

はじめに

docs/README.md at master · docker-library/docs を見てみても、2019年9月3日現在、 PHP 5.3 のイメージはありません。

でも、古いサーバの PHP をメンテしたい時、 PHP 5.3 が欲しいのです。そこで、 Docker イメージを作ってみました。

また、古いサーバの古い PHP を、 Composer を使って管理するようにもしたいので、 Composer も Docker イメージに含めるようにしました。

方針

PHP 5.3 をパッケージマネージャーで簡単にインストールできる Docker イメージを元にします。

Docker イメージを作る。

  1. Dockerfile を作る。
  2. Docker イメージをビルドする。
  3. Docker コンテナを起動する。

以上の各ステップはそれぞれ 1 コマンドで実行でき、次のようになりました。

$ cat <<'EOF' > Dockerfile
FROM centos:6

RUN yum update -y

RUN yum install -y php \
  && sed -i -e 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php.ini

RUN yum install -y unzip \
  && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
  && php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
  && php composer-setup.php \
  && php -r "unlink('composer-setup.php');" \
  && mv composer.phar /usr/local/bin/composer
EOF
docker build . -t php53
docker run --rm -it php53 bash

完成したイメージの内容

[root@cd1d4af608f3 /]# php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
[root@cd1d4af608f3 /]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
openssl
pcntl
pcre
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
tokenizer
xml
zip
zlib

[Zend Modules]

[root@cd1d4af608f3 /]# composer --version
Composer version 1.9.0 2019-08-02 20:55:32
[root@cd1d4af608f3 /]#

ちなみに、ベースのディストリビューションです。

[root@cd1d4af608f3 /]# cat /etc/redhat-release
CentOS release 6.10 (Final)
[root@cd1d4af608f3 /]#

おわりに

古いサーバで PHP 1 ファイルでシンプルなことを行なっていたプログラムに、機能を追加していって複雑なもとをしようとしています。

複雑な物を管理しやすくするためには、そのための仕組みを導入する必要があります。管理するのに、 Composer 、テストするのに PHPUnit 、などなどです。

本投稿では、そのために古いサーバの環境を再現いたしました。

以上です。

コメントを残す