如何使用Docker在本地针对多版本PHP运行类库单元测试?
本地用Docker多PHP版本测试PHP类库的最简方案
方案一:单命令快速测单个版本
不需要任何配置文件,直接用官方PHP镜像挂载本地代码,安装依赖后跑测试。以PHPUnit为例:
- 测试PHP 7.4:
docker run --rm -v $(pwd):/app php:7.4-cli bash -c "cd /app && apt update && apt install -y unzip && php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer && composer install && ./vendor/bin/phpunit" - 换版本只需要把
php:7.4-cli改成php:8.0-cli、php:8.1-cli之类的官方镜像标签即可。
这种方式适合临时验证单个版本,胜在零配置,缺点是每次运行都会重复安装依赖,速度稍慢。
方案二:Docker Compose批量跑多版本
如果需要一次性测试多个版本,用Docker Compose更高效,一次配置可重复运行:
在类库根目录创建
docker-compose.yml:version: '3' services: php74-test: image: php:7.4-cli volumes: - .:/app command: > bash -c "apt update && apt install -y unzip && php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer && composer install && ./vendor/bin/phpunit" php80-test: image: php:8.0-cli volumes: - .:/app command: > bash -c "apt update && apt install -y unzip && php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer && composer install && ./vendor/bin/phpunit" php81-test: image: php:8.1-cli volumes: - .:/app command: > bash -c "apt update && apt install -y unzip && php -r \"copy('https://getcomposer.org/installer', 'composer-setup.php');\" && php composer-setup.php --install-dir=/usr/local/bin --filename=composer && composer install && ./vendor/bin/phpunit"启动所有测试:
docker-compose up
补充说明
- 如果测试需要PHP扩展(比如
pdo_mysql、gd),可以在apt update之后添加docker-php-ext-install pdo_mysql这类命令安装。 - 要是已经有
composer.lock文件,composer install会更快;如果不需要开发依赖,可加--no-dev参数。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

