Web アプリケーション開発/CI用途を想定して、必要な拡張を有効にした PHP 7.1 - 7.4 の Docker イメージを DockerHub に公開しました。
動機
開発/CI で Docker イメージをよく利用しています。オフィシャルの PHP イメージ(library/php)をベースにして、必要な拡張を追加して利用しているのですが、毎回プロジェクトごとにビルドするのが手間に感じていました。プロジェクト独自にビルドして Docker Registry に push しておいても良いですが、そうなるとこのイメージのメンテナンスが手間になったりするので、小さなストレスを抱えていました。
そこで一元的に複数バージョンを管理して、PHP のパッチバージョンが出る度に更新されていく Docker イメージを作りました。
内容
オフィシャルの PHP イメージをベースに、必要な拡張を有効にしてビルドしています。現在は、以下のようなバリエーションがあります。
- OS: buster
- PHP: 7, 7.1 - 7.4, 7.1.x, 7.2.x, 7.3.x, 7.4.x
- SAPI: cli, apache, fpm
有効にしている拡張は以下です。
[PHP Modules] Core ctype curl date dom exif fileinfo filter ftp gd hash iconv json libxml mbstring mysqlnd openssl pcre PDO pdo_mysql pdo_pgsql pdo_sqlite pgsql Phar posix readline redis Reflection session SimpleXML SPL sqlite3 standard tokenizer xdebug xml xmlreader xmlwriter Zend OPcache zip zlib [Zend Modules] Xdebug Zend OPcache
利用方法
バージョンや SAPI はオフィシャル PHP イメージと同様にタグにて指定します。タグ名をオフィシャルのものと同様にしていますので、PHP 7.4.4 + fpm ならshin1x1/php-dev:7.4.4-apache-buster
、PHP 7.1 + apache なら shin1x1/php-dev:7.1-apache-buster
となります。
下記では、7.1.33 の cli イメージを実行しています。
$ docker run --rm shin1x1/php-dev:7.1.33-cli-buster php -v PHP 7.1.33 (cli) (built: Nov 22 2019 18:22:12) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.33, Copyright (c) 1999-2018, by Zend Technologies with Xdebug v2.9.4, Copyright (c) 2002-2020, by Derick Rethans
ビルド環境
GitHub の下記リポジトリにビルド用のファイルを置いています。
オフィシャル PHP イメージの更新を GItHub Actions でデイリーでチェックしており、必要な更新があれば、Dockerfile を生成して、Git の Tag を設定します。
DockerHub では、この GitHub リポジトリと連携しているので、タグが更新されれば、それに含まれる Dockerfile に従ってイメージをビルドします。
雑感
2020/04/16 現在では、27 のタグが設定されているので、それらを全て DockerHub の Free プランでビルドすると直列に実行されるので、4 時間強(250m)かかりました。基本は、自動で実行するのでいつの間にか更新されるだけで良いのですが、結構時間かかりますね。
拡張の追加では、各バージョン、SAPI で同じコマンドを指定していたのですが、gd は 7.4 とそれ未満でオプションが変わっていて、処理を分岐しています。
オフィシャル PHP イメージの更新チェックや Dockerfile 生成の処理は、Go で実装した下記ツールを利用しています。
さいごに
プロダクションプロジェクトだけでなく、サンプルプロジェクトなどで PHP イメージが欲しい時に拡張を追加してビルドするのに、実行時間含めて小さなストレスを抱えていたので、自動でビルドしてくれる環境できて良かったです。
オフィシャル PHP イメージに必要な拡張を追加しただけのシンプルなイメージなので、要件が合うようであれば、利用してみて下さい。