自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。

PHP-FPM Docker image 選擇與重建

2026年7月28日 星期二


最近整理 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 時,主要做了幾件事:

  1. 明確指定 base image
  2. apt-get update、apt-get install、清 cache 放在同一層
  3. 加上 --no-install-recommends
  4. 移除 production image 不必要的 vim
  5. 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 意見:

張貼留言