Офіційний образ php має кілька варіантів - вони відрізняються тим, як запускається PHP:
| Тег | Що всередині | Для чого |
|---|---|---|
php:8.5-cli |
лише PHP CLI | команди, воркери черг, скрипти |
php:8.5-fpm |
PHP-FPM (FastCGI) | за Nginx/Caddy, класичний веб-стек |
php:8.5-apache |
Apache з mod_php |
простий «все в одному» веб-сервер |
php:8.5-zts |
збірка з потокобезпекою | розширення на кшталт parallel, вбудовування |
Кожен варіант має основу Debian (за замовчуванням) або Alpine (php:8.5-fpm-alpine) - менший розмір, але інша бібліотека C (musl), що інколи дає несумісності.
Альтернатива для Laravel - образи FrankenPHP (dunglas/frankenphp): сучасний сервер на основі Caddy з вбудованим PHP, HTTPS і режимом воркера для Octane - один процес замість зв'язки Nginx + PHP-FPM.
Встановлення розширень - допоміжні скрипти офіційного образу:
FROM php:8.5-fpm
RUN apt-get update \
&& apt-get install -y --no-install-recommends libpq-dev libzip-dev libicu-dev \
&& docker-php-ext-install pdo_pgsql zip intl opcache \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& rm -rf /var/lib/apt/lists/*
docker-php-ext-install- розширення з вихідних кодів PHP (pdo_mysql,intl,zip,gd,opcache...);docker-php-ext-configure- параметри перед збиранням (наприклад,gd --with-jpeg --with-freetype);pecl install+docker-php-ext-enable- розширення з PECL (redis,xdebug,imagick);- системні бібліотеки (
libpq-dev,libzip-dev) треба встановити самостійно - їх назви різняться в Debian і Alpine.
Простіше - install-php-extensions (проєкт mlocati): сам встановлює потрібні системні залежності для обох дистрибутивів:
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions pdo_pgsql intl zip redis opcache
Конфігурація PHP: готові шаблони php.ini-production / php.ini-development лежать у $PHP_INI_DIR; власні налаштування - окремим файлом у $PHP_INI_DIR/conf.d/.
Пастка: інструменти збирання (*-dev пакети, компілятори) лишаються в образі - їх прибирають у тому самому RUN чи через multi-stage build.