wayofdev/php-basedocker-php-base 项目是一个用于创建和维护 PHP Docker 镜像的系统。它使用 Ansible 生成多个 PHP 版本(7.4、8.0、8.1、8.2、8.3、8.4)和类型(CLI、FPM、Supervisord)的 Dockerfile,基于 Alpine Linux 构建。该项目通过 GitHub Actions 实现自动化构建流程,创建支持 AMD64 和 ARM64 的多架构镜像,并使用 goss 进行测试。镜像预装多种 PHP 扩展,设计为 PHP 应用在开发和生产环境中的基础镜像。
镜像内置多种 PHP 扩展,如下表所示:
| 扩展 | 描述 | 类型 |
|---|---|---|
| intl | 国际化函数 | native |
| pcntl | 进程控制 | native |
| sockets | 套接字通信函数 | native |
| pdo_pgsql | PostgreSQL 数据库支持 | native |
| pdo_mysql | MySQL 数据库支持 | native |
| opcache | 通过共享内存存储预编译脚本字节码提升性能 | native |
| zip | ZIP 归档读写函数 | native |
| bcmath | 任意精度数学运算 | native |
| exif | 可交换图像信息 | native |
| gd | 图像处理库 | native |
| redis | Redis 数据库交互 | pecl |
| memcached | Memcached 缓存交互 | pecl |
| decimal | 任意精度浮点小数 | pecl |
| amqp | 高级消息队列协议(AMQP)库 | pecl |
| yaml | YAML 解析库 | pecl |
| grpc | gRPC 库 | pecl |
| protobuf | 协议缓冲区库 | pecl |
PHP 基础镜像可从 Docker Hub 和 GitHub Container Registry 获取。
bashdocker pull wayofdev/php-base:8.3-fpm-alpine-latest
bashdocker pull ghcr.io/wayofdev/docker-php-base:8.3-fpm-alpine-latest
将 8.3-fpm-alpine-latest 替换为所需的 PHP 版本、类型和标签。
镜像支持以下组合:
bash# PHP 8.1 CLI docker pull wayofdev/php-base:8.1-cli-alpine-latest # PHP 8.2 FPM docker pull wayofdev/php-base:8.2-fpm-alpine-latest # PHP 8.3 Supervisord docker pull wayofdev/php-base:8.3-supervisord-alpine-latest
完整标签列表可参考 Docker Hub Tags 或 GitHub Container Registry Packages。
将此镜像作为基础构建自定义镜像:
dockerfile# 从 Docker Hub FROM wayofdev/php-base:8.3-fpm-alpine-latest # 或从 GitHub Container Registry # FROM ghcr.io/wayofdev/docker-php-base:8.3-fpm-alpine-latest # 此处添加自定义 Dockerfile 指令 # ...
项目使用一系列工具进行开发和测试,Makefile 提供了简化开发流程的命令。
克隆仓库:
bashgit clone ***:wayofdev/docker-php-base.git && \ cd docker-php-base
使用 Ansible 从 Jinja 模板生成可分发的 Dockerfile:
bashmake generate
构建默认镜像:
bashmake build
默认构建 Makefile 中 IMAGE_TEMPLATE 变量指定的镜像(默认值为 8.3-fpm-alpine)。
构建特定镜像:
bashmake build IMAGE_TEMPLATE="8.3-fpm-alpine"
将 8.3-fpm-alpine 替换为所需的 PHP 版本、类型和操作系统。
构建所有镜像:
bashmake build IMAGE_TEMPLATE="8.1-cli-alpine" make build IMAGE_TEMPLATE="8.1-fpm-alpine" make build IMAGE_TEMPLATE="8.1-supervisord-alpine" make build IMAGE_TEMPLATE="8.2-cli-alpine" make build IMAGE_TEMPLATE="8.2-fpm-alpine" make build IMAGE_TEMPLATE="8.2-supervisord-alpine" make build IMAGE_TEMPLATE="8.3-cli-alpine" make build IMAGE_TEMPLATE="8.3-fpm-alpine" make build IMAGE_TEMPLATE="8.3-supervisord-alpine" make build IMAGE_TEMPLATE="8.4-cli-alpine" make build IMAGE_TEMPLATE="8.4-fpm-alpine" make build IMAGE_TEMPLATE="8.4-supervisord-alpine"
项目使用 Ansible 生成 Dockerfile 和配置。可通过修改 src/group_vars/base.yml 文件调整 PHP 扩展和设置。
在 group_vars/base.yml 中可调整以下 PHP 和 OPcache 设置:
yamlsettings_opcache_ini: php_opcache_enable: 1 php_opcache_enable_cli: 1 settings_php_ini: php_timezone: "UTC" php_post_max_size: "16M" php_memory_limit: "256M"
通过修改 group_vars/base.yml 中的扩展列表启用或禁用 PHP 扩展:
yamlext_native_enabled: - intl - pcntl - sockets - pdo_mysql - pdo_pgsql - OPcache - zip - bcmath - exif - gd ext_pecl_enabled: - redis - memcached - decimal - amqp - yaml - grpc - protobuf
添加扩展到列表或从列表中移除即可。修改后需重新生成 Dockerfile:
bashmake generate
项目使用 dgoss 测试 Docker 镜像。
测试默认镜像:
bashmake test
测试 IMAGE_TEMPLATE 变量指定的镜像(默认 8.3-fpm-alpine)。
测试特定镜像:
bashmake test IMAGE_TEMPLATE="8.3-fpm-alpine"
将 8.3-fpm-alpine 替换为目标镜像。
测试所有镜像:
bashmake test IMAGE_TEMPLATE="8.1-cli-alpine" make test IMAGE_TEMPLATE="8.1-fpm-alpine" make test IMAGE_TEMPLATE="8.1-supervisord-alpine" make test IMAGE_TEMPLATE="8.2-cli-alpine" make test IMAGE_TEMPLATE="8.2-fpm-alpine" make test IMAGE_TEMPLATE="8.2-supervisord-alpine" make test IMAGE_TEMPLATE="8.3-cli-alpine" make test IMAGE_TEMPLATE="8.3-fpm-alpine" make test IMAGE_TEMPLATE="8.3-supervisord-alpine" make test IMAGE_TEMPLATE="8.4-cli-alpine" make test IMAGE_TEMPLATE="8.4-fpm-alpine" make test IMAGE_TEMPLATE="8.4-supervisord-alpine"
测试配置通过为每个镜像变体生成的 goss.yaml 文件定义,包括:
运行 make test 时执行以下步骤:
goss.yaml 中定义的测试。项目有专门的安全策略。
感谢考虑为 wayofdev 社区贡献!我们欢迎各种形式的贡献:
贡献前请查阅贡献指南。





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务