docker-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 社区贡献!我们欢迎各种形式的贡献:
贡献前请查阅贡献指南。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429