php之官方docker镜像介绍
1.gitHub 仓库
官方 Docker 镜像的构建脚本和配置 这里包含用于生成 PHP 官方 Docker 镜像所需的 Dockerfile 模板、版本配置、以及相关的辅助脚本,比如
docker-php-ext-install、docker-php-ext-configure、docker-php-ext-enable等 (GitHub)。维护 “official images” 生态的一环 它是 Docker 官方镜像项目(Official Images)的一部分。这个项目由
docker-library/official-images和docker-library/docs等仓库协同工作。docker-library/php提供 PHP 镜像的源码和构建逻辑,而official-images管理镜像标签、架构和生成机制,docs包含镜像的说明文档 (GitHub)。提供辅助构建工具 仓库中还包括了构建过程中使用的脚本,如
apply-templates.sh,versions.sh,update.sh等,确保镜像构建版本一致、支持多架构,并可以自动化生成 Docker Hub 上的 README 和标签 (GitHub)。
2.docker 镜像
- https://hub.docker.com/_/php/
这是最主要、最可信赖的 PHP 官方镜像库,由 Docker 社区管理维护,包含多种 PHP 版本及构建变体,适用于不同的使用场景,如 CLI、FPM、Apache,或基于不同 Linux 发行版 (Debian、Alpine) 构建的镜像。
- 官方镜像提供多个标签形式,常见包括:
- php:8.4, php:8.3, php:8.2 … —— 指定 PHP 主版本。
- php:8.4-apache, php:8.4-fpm, php:8.4-cli —— 指定运行模式(如 Apache 模式、FPM 模式、命令行模式)。
- php:8.4-apache-bullseye, php:8.4-fpm-buster —— 基于 Debian Bullseye 或 Buster 的镜像;如果省略,如 php:apache,则通常对应当前最新的稳定 Debian 版本。
- 目前查看官网最新维护的有:
alpine3.21,alpine3.22,bookworm,trixie这四个, 之前使用过buster, 但是buster已经被archive了, 需要使用特殊的配置才能继续使用, 但是还可以使用bullseye. 不过后面应该也不能继续直接使用了
3.Debian 系列(如 buster、bullseye),Alpine(轻量版) 怎么理解?
Debian 系列(buster、bullseye) 和 Alpine(轻量版),其实是指 PHP 官方 Docker 镜像的底层基础操作系统,就像房子下面的地基。
解释一下:
1>. Debian 系列(buster、bullseye)
- Debian 是一个稳定的 Linux 发行版,很多服务器系统(比如 Ubuntu)都基于它。
buster和bullseye是 Debian 的版本代号:- buster → Debian 10(较老)
- bullseye → Debian 11(较新,官方目前主推)
- (再新的是
bookworm→ Debian 12)
特点:
- 体积中等(比 Alpine 大很多)。
- 软件包比较全,兼容性好。
- 更适合安装需要很多系统依赖的 PHP 扩展(比如
gd、intl、imagick)。
例子:
php:8.3-fpm-bullseye # PHP 8.3 + FPM + Debian 11 php:8.3-cli-buster # PHP 8.3 + CLI + Debian 10
2>. Alpine(轻量版)
- Alpine Linux 是一个非常小巧的 Linux 发行版。
默认体积非常小(官方 PHP Alpine 镜像通常在 15~30MB 左右)。
特点:
- 镜像小 → 下载、部署快。
- 运行时占用低。
- 但是有时候编译 PHP 扩展会比较麻烦,因为 Alpine 使用的是
musl而不是glibc,一些扩展可能需要额外 patch 或依赖。
例子:
php:8.3-fpm-alpine # PHP 8.3 + FPM + Alpine php:8.3-cli-alpine3.18 # 指定 Alpine 版本
3>. 对比总结
| 特性 | Debian 系列(buster/bullseye) | Alpine(轻量版) |
|---|---|---|
| 镜像大小 | 大(80~150MB) | 小(15~30MB) |
| 安装依赖 | 简单,APT 包全 | 有时复杂,需要 APK 或编译 |
| 性能 | 稳定 | 内存占用更少,但编译有坑 |
| 适用场景 | 功能齐全、依赖多 | 极简环境、追求体积 |
选择建议:
- 初学/大多数业务场景 → 用 Debian(
bullseye),省心。- 极致轻量或熟悉 Alpine 生态 → 用 Alpine(适合云函数、小镜像部署)。
4.PHP 官方 Docker 镜像目前底层主要就支持这两种系统系
- Debian 系列(不同版本代号:
buster、bullseye、bookworm) - Alpine 系列(不同版本号:
alpine3.18、alpine3.19等)
📌 原因
官方维护成本 PHP 官方镜像是 Docker 官方库(docker-library/php)维护的,如果同时支持很多底层发行版(比如 Ubuntu、CentOS、Fedora),维护、构建、测试成本会非常高。
兼容性
- Debian 系列稳定性高、依赖齐全,适合大多数业务。
- Alpine 轻量、启动快,适合追求极致镜像体积的场景。 这两种基本覆盖了常见需求。
- 技术路线 Debian + Alpine 已经能覆盖:
- 全功能 + 高兼容性(Debian)
- 轻量化部署(Alpine)
当前可见的变体
(以 PHP 8.3 为例)
| 标签 | 底层系统 |
|---|---|
php:8.3, php:8.3-bullseye, php:8.3-fpm, php:8.3-apache | Debian 11 (bullseye) |
php:8.3-buster, php:8.3-fpm-buster | Debian 10 (buster) |
php:8.3-bookworm, php:8.3-fpm-bookworm | Debian 12 (bookworm) |
php:8.3-alpine, php:8.3-fpm-alpine3.18 | Alpine 3.18 / 3.19 |
💡 换句话说:
- 要稳定、依赖好装 → 用 Debian 变体(
bullseye/bookworm) - 要极致轻量 → 用 Alpine 变体(
alpine3.x)
查看PHP 容器的操作系统类型(以及版本)
进入php 容器实行:
# cat /etc/os-release
我的:
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
分析: 这个PHP 容器底层操作系统是 Debian 12(Bookworm)。
从提供的信息可以看出:
| 字段 | 值 | 含义 |
|---|---|---|
PRETTY_NAME | Debian GNU/Linux 12 (bookworm) | 人类可读的完整系统名称 |
NAME | Debian GNU/Linux | 系统名称 |
VERSION_ID | 12 | 版本号 |
VERSION | 12 (bookworm) | 版本信息 |
VERSION_CODENAME | bookworm | Debian 代号 |
ID | debian | 系统 ID,用于脚本识别 |
HOME_URL / SUPPORT_URL / BUG_REPORT_URL | 官方网站和支持链接 | 官方资源链接 |
💡 总结:
- PHP 镜像基于 Debian Bookworm。
- 这是当前 Debian stable(稳定版),官方镜像推荐在生产环境中使用。
- 相比 Alpine 镜像,Bookworm 镜像更大,但兼容性和稳定性更好。
- 如果安装 PHP 扩展,可以直接使用
docker-php-ext-install、docker-php-ext-configure等工具,无需额外处理源码目录(非 Alpine 镜像通常自带/usr/src/php/ext)。
Debian vs Alpine PHP 官方镜像对比表
- 🐘 PHP 官方镜像底层对比:Debian vs Alpine
| 特性 | Debian 系列(buster/bullseye/bookworm) | Alpine 系列 |
|---|---|---|
| 镜像体积 | 中等,约 80~150MB | 极小,约 15~30MB |
| 包管理 | APT (apt-get) | APK (apk) |
| 默认 libc | glibc | musl |
| 扩展安装 | 大部分扩展开箱即用,兼容性高 | 某些扩展可能需要额外依赖和 patch |
| 稳定性 | 高,适合生产环境 | 较高,但部分扩展可能遇到兼容问题 |
| 启动速度 | 中等 | 快(轻量) |
| 适用场景 | - 稳定生产服务 - 需要完整依赖支持的项目 - 容器大小不是首要考虑 | - 极致轻量化部署 - CI/CD 快速拉取镜像 - 云函数 / 微服务环境 |
| 默认 PHP 官方镜像 | php:8.3-fpm-bullseyephp:8.3-cli-bullseye | php:8.3-fpm-alpine3.18php:8.3-cli-alpine3.18 |
| 维护便利性 | 高,文档和社区案例多 | 中,需要熟悉 Alpine 生态 |
- 💡 选择建议
- 优先稳定和兼容性 → Debian 系列
- 追求最小镜像体积 / 快速部署 → Alpine 系列
- 新项目建议:
不在乎镜像体积 → Debian bullseye 或 bookworm
极致轻量 → Alpine 3.x
- 使用版本格式
alpine:
php:<php_version>-<sapi>-<alpine_version>
php:8.3-fpm-alpine3.17 # 基于 Alpine 3.17
php:8.3-fpm-alpine3.18 # 基于 Alpine 3.18
php:8.3-fpm-alpine3.19 # 基于 Alpine 3.19
debian:
php:<php_version>-<sapi>-<debian_codename>
php:8.3-fpm-bullseye → PHP 8.3 + FPM + Debian 11 (bullseye)
php:8.3-fpm-buster → PHP 8.3 + FPM + Debian 10 (buster)
php:8.3-fpm-bookworm → PHP 8.3 + FPM + Debian 12 (bookworm)
关于镜像的SAPI
在 PHP 官方镜像里,CLI 和 FPM 是两种不同的 SAPI(Server API):
1>. SAPI 的概念
- SAPI = Server API,表示 PHP 与外部环境交互的方式。
- 不同 SAPI 决定了 PHP 的运行模式和用途。
2>. 常见 SAPI 类型
PHP 官方镜像 SAPI 对照图,把 CLI、FPM、Apache 的关系、用途和特点一目了然地展示出来:
+----------------------+---------------------+-------------------------+
| SAPI 类型 | 官方镜像标签 | 用途 / 特点 |
+----------------------+---------------------+-------------------------+
| CLI (Command Line) | php:<version>-cli | - 命令行脚本运行 |
| | | - Cron / CI / 工具 |
| | | - 无 Web 服务 |
+----------------------+---------------------+-------------------------+
| FPM (FastCGI) | php:<version>-fpm | - 配合 Nginx / Apache |
| | | - 高并发 Web 请求处理 |
| | | - 多进程并发 |
+----------------------+---------------------+-------------------------+
| Apache Module | php:<version>-apache| - PHP 内嵌 Apache |
| | | - 内置 Web 服务器 |
| | | - 开发/小型部署 |
+----------------------+---------------------+-------------------------+
说明:
- SAPI(Server API) 决定了 PHP 与外部环境交互的方式,不同 SAPI 影响运行模式和用途。
- CLI → 只做脚本,不处理 Web 请求。
- FPM → 专为 Web 服务设计,配合反向代理服务器(Nginx/Apache)使用,支持高并发。
- Apache Module → PHP 直接嵌入 Apache,适合开发或小型部署,性能和扩展性略低于 FPM + Nginx。
总结:
- PHP 官方镜像里 CLI 和 FPM 就是 两种不同 SAPI。
- 选择哪个 SAPI,取决于你是做 脚本/工具 还是 Web 服务。
