指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
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 等)
📌 原因
  1. 官方维护成本 PHP 官方镜像是 Docker 官方库(docker-library/php)维护的,如果同时支持很多底层发行版(比如 Ubuntu、CentOS、Fedora),维护、构建、测试成本会非常高。

  2. 兼容性

  • Debian 系列稳定性高、依赖齐全,适合大多数业务。
  • Alpine 轻量、启动快,适合追求极致镜像体积的场景。 这两种基本覆盖了常见需求。
  1. 技术路线 Debian + Alpine 已经能覆盖:
  • 全功能 + 高兼容性(Debian)
  • 轻量化部署(Alpine)
当前可见的变体

(以 PHP 8.3 为例)

标签底层系统
php:8.3, php:8.3-bullseye, php:8.3-fpm, php:8.3-apacheDebian 11 (bullseye)
php:8.3-buster, php:8.3-fpm-busterDebian 10 (buster)
php:8.3-bookworm, php:8.3-fpm-bookwormDebian 12 (bookworm)
php:8.3-alpine, php:8.3-fpm-alpine3.18Alpine 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_NAMEDebian GNU/Linux 12 (bookworm)人类可读的完整系统名称
NAMEDebian GNU/Linux系统名称
VERSION_ID12版本号
VERSION12 (bookworm)版本信息
VERSION_CODENAMEbookwormDebian 代号
IDdebian系统 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)
默认 libcglibcmusl
扩展安装大部分扩展开箱即用,兼容性高某些扩展可能需要额外依赖和 patch
稳定性高,适合生产环境较高,但部分扩展可能遇到兼容问题
启动速度中等快(轻量)
适用场景- 稳定生产服务
- 需要完整依赖支持的项目
- 容器大小不是首要考虑
- 极致轻量化部署
- CI/CD 快速拉取镜像
- 云函数 / 微服务环境
默认 PHP 官方镜像php:8.3-fpm-bullseye
php:8.3-cli-bullseye
php:8.3-fpm-alpine3.18
php:8.3-cli-alpine3.18
维护便利性高,文档和社区案例多中,需要熟悉 Alpine 生态
  • 💡 选择建议
  1. 优先稳定和兼容性 → Debian 系列
  2. 追求最小镜像体积 / 快速部署 → Alpine 系列
  3. 新项目建议:

不在乎镜像体积 → 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 服务器        |
|                      |                     | - 开发/小型部署           |
+----------------------+---------------------+-------------------------+

说明:

  1. SAPI(Server API) 决定了 PHP 与外部环境交互的方式,不同 SAPI 影响运行模式和用途。
  2. CLI → 只做脚本,不处理 Web 请求。
  3. FPM → 专为 Web 服务设计,配合反向代理服务器(Nginx/Apache)使用,支持高并发。
  4. Apache Module → PHP 直接嵌入 Apache,适合开发或小型部署,性能和扩展性略低于 FPM + Nginx。

总结:

  • PHP 官方镜像里 CLI 和 FPM 就是 两种不同 SAPI。
  • 选择哪个 SAPI,取决于你是做 脚本/工具 还是 Web 服务。