最近整理 PHP-FPM 的 Dockerfile,順便把 PHP 8.4、PHP 8.2、PHP 8.3、PHP 7.4 的 image 選擇記錄一下。
PHP 8.4 要選哪一個?
如果是一般 Laravel、Symfony、WordPress 或自己寫的 PHP 網站,建議先用:
FROM php:8.4-fpm
如果想更明確,可以寫:
FROM php:8.4-fpm-trixie
Debian-based image 比較適合一般網站環境,extension 和系統套件比較不容易踩到奇怪的相容性問題。
Alpine base 呢?
Alpine image 比較小,例如:
FROM php:8.4-fpm-alpine
但 Alpine 使用 musl libc,有時 PHP extension、Composer package 或外部 binary 會比較麻煩。
除非真的很在意 image 大小,不然一般網站我會先選 Debian 版。
不建議用 buster
buster 是比較舊的 Debian 系列,不建議再拿來當新的 PHP 8.4 image 基礎。
如果要固定 Debian 版本,可以考慮:
FROM php:8.4-fpm-trixie
或依需求使用 bookworm 系列。
官方 image 更新後要重新 build
如果官方 php:8.4-fpm 有更新,本機自建 image 不會自己變新。
要重新 build,建議加上 --pull:
docker build --pull -f Dockerfile_php84-fpm -t tiebob/php:8.4-fpm .
如果用 Compose:
docker compose build --pull
docker compose up -d
如果想完全不用 cache:
docker compose build --pull --no-cache
Dockerfile 整理重點:
這次整理 Dockerfile 時,主要做了幾件事:
- 明確指定 base image
- apt-get update、apt-get install、清 cache 放在同一層
- 加上 --no-install-recommends
- 移除 production image 不必要的 vim
- Composer 改成從官方 image 複製
Composer 可以這樣裝:
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
這樣比在 Dockerfile 裡 curl installer 清楚一些。
PHP 7.4:
後來也建立了 PHP 7.4 的 Dockerfile:
FROM php:7.4-fpm-bullseye
不過 PHP 7.4 已經是 EOL,只建議給舊系統短期使用,不適合新的正式服務。
所以如果專案裡還有 PHP 7.4,最好在檔案裡加註解,提醒自己這是 legacy 用途。
結論:
我的選擇大概是:
一般網站:php:8.4-fpm 或 php:8.4-fpm-trixie
想省 image 大小:php:8.4-fpm-alpine
舊系統相容:php:7.4-fpm-bullseye,但要標示風險
Image 不一定要追最新,但版本和用途要寫清楚,之後維護才不會搞混。

0 意見:
張貼留言