Shin x Blog

PHPをメインにWebシステムを開発してます。Webシステム開発チームの技術サポートも行っています。

PHP 7.1 - 7.4 の開発用 Docker イメージ shin1x1/php-dev を公開しました

Web アプリケーション開発/CI用途を想定して、必要な拡張を有効にした PHP 7.1 - 7.4 の Docker イメージを DockerHub に公開しました。

hub.docker.com

動機

開発/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 の下記リポジトリにビルド用のファイルを置いています。

github.com

オフィシャル PHP イメージの更新を GItHub Actions でデイリーでチェックしており、必要な更新があれば、Dockerfile を生成して、Git の Tag を設定します。

DockerHub では、この GitHub リポジトリと連携しているので、タグが更新されれば、それに含まれる Dockerfile に従ってイメージをビルドします。

雑感

2020/04/16 現在では、27 のタグが設定されているので、それらを全て DockerHub の Free プランでビルドすると直列に実行されるので、4 時間強(250m)かかりました。基本は、自動で実行するのでいつの間にか更新されるだけで良いのですが、結構時間かかりますね。

拡張の追加では、各バージョン、SAPI で同じコマンドを指定していたのですが、gd は 7.4 とそれ未満でオプションが変わっていて、処理を分岐しています。

github.com

オフィシャル PHP イメージの更新チェックや Dockerfile 生成の処理は、Go で実装した下記ツールを利用しています。

github.com

さいごに

プロダクションプロジェクトだけでなく、サンプルプロジェクトなどで PHP イメージが欲しい時に拡張を追加してビルドするのに、実行時間含めて小さなストレスを抱えていたので、自動でビルドしてくれる環境できて良かったです。

オフィシャル PHP イメージに必要な拡張を追加しただけのシンプルなイメージなので、要件が合うようであれば、利用してみて下さい。