acc-docker-php-extensions-knowledge
SKILL.md
Docker PHP Extensions Knowledge Base
Patterns for installing, building, and managing PHP extensions in Docker containers.
Extension Categories
| Category | Extensions | Purpose |
|---|---|---|
| Core | opcache, intl, mbstring, bcmath | Performance, i18n, math |
| Database | pdo_pgsql, pdo_mysql, pgsql, mysqli | Database connectivity |
| Cache | redis, apcu, memcached | Caching layers |
| Crypto | sodium, openssl | Encryption, hashing |
| Image | gd, imagick | Image processing |
| Archive | zip, zlib, bz2 | Compression |
| Message | amqp, pcntl | Queues, process control |
| Debug | xdebug, pcov | Debugging, coverage |
| Serialization | igbinary, msgpack | Fast serialization |
Installation Methods
Method 1: docker-php-ext-install (Built-in Extensions)
# Extensions bundled with PHP source
RUN docker-php-ext-install -j$(nproc) \
opcache \
intl \
pdo_pgsql \
pdo_mysql \
zip \
bcmath \
pcntl \
sockets
Method 2: docker-php-ext-configure + install
# Extensions requiring configuration
RUN docker-php-ext-configure gd \
--with-freetype \
--with-jpeg \
--with-webp \
&& docker-php-ext-install -j$(nproc) gd
Method 3: PECL Install
# Extensions from PECL repository
RUN pecl install redis-6.1.0 apcu-5.1.24 igbinary-3.2.16 \
&& docker-php-ext-enable redis apcu igbinary
Method 4: Manual Compilation
# For extensions not in PECL or needing custom patches
RUN curl -fsSL https://github.com/example/ext/archive/v1.0.tar.gz | tar xz \
&& cd ext-1.0 \
&& phpize \
&& ./configure \
&& make -j$(nproc) \
&& make install \
&& docker-php-ext-enable ext
Alpine vs Debian Build Dependencies
| Extension | Alpine Packages | Debian Packages |
|---|---|---|
| intl | icu-dev |
libicu-dev |
| pdo_pgsql | libpq-dev |
libpq-dev |
| pdo_mysql | (none) | (none) |
| gd | freetype-dev libjpeg-turbo-dev libpng-dev libwebp-dev |
libfreetype6-dev libjpeg62-turbo-dev libpng-dev libwebp-dev |
| zip | libzip-dev |
libzip-dev |
| imagick | imagemagick-dev |
libmagickwand-dev |
| amqp | rabbitmq-c-dev |
librabbitmq-dev |
| memcached | libmemcached-dev zlib-dev |
libmemcached-dev zlib1g-dev |
| sodium | libsodium-dev |
libsodium-dev |
| bz2 | bzip2-dev |
libbz2-dev |
| xsl | libxslt-dev |
libxslt1-dev |
| ldap | openldap-dev |
libldap2-dev |
| gmp | gmp-dev |
libgmp-dev |
| imap | imap-dev krb5-dev |
libc-client-dev libkrb5-dev |
Runtime vs Build Dependencies Pattern
FROM php:8.4-fpm-alpine AS production
# 1. Install build dependencies (virtual package for easy removal)
RUN apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
libpq-dev \
libzip-dev \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
rabbitmq-c-dev \
\
# 2. Install and configure extensions
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
intl \
pdo_pgsql \
zip \
gd \
opcache \
bcmath \
pcntl \
sockets \
\
# 3. Install PECL extensions
&& pecl install redis apcu amqp igbinary \
&& docker-php-ext-enable redis apcu amqp igbinary \
\
# 4. Remove build dependencies (keep runtime libs)
&& apk del .build-deps
# 5. Install runtime-only libraries
RUN apk add --no-cache \
icu-libs \
libpq \
libzip \
freetype \
libjpeg-turbo \
libpng \
rabbitmq-c
Extension Builder Stage Pattern
# Dedicated stage for compiling extensions (reusable across images)
FROM php:8.4-fpm-alpine AS ext-builder
RUN apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
libpq-dev \
libzip-dev \
&& docker-php-ext-install -j$(nproc) intl pdo_pgsql zip opcache bcmath \
&& pecl install redis apcu \
&& docker-php-ext-enable redis apcu \
&& apk del .build-deps
# Production stage copies only compiled artifacts
FROM php:8.4-fpm-alpine AS production
COPY /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/
COPY /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/
RUN apk add --no-cache icu-libs libpq libzip
Framework Extension Combinations
Symfony Stack
RUN docker-php-ext-install -j$(nproc) \
intl \ # Translation, validation, routing
pdo_pgsql \ # Doctrine DBAL (PostgreSQL)
opcache \ # Performance
zip \ # Composer, file handling
bcmath \ # Precise math (money)
pcntl \ # Messenger async workers
sockets # Messenger AMQP transport
RUN pecl install redis apcu amqp \
&& docker-php-ext-enable redis apcu amqp
Laravel Stack
RUN docker-php-ext-install -j$(nproc) \
pdo_mysql \ # Eloquent (MySQL)
opcache \ # Performance
zip \ # File handling
bcmath \ # Precise math
pcntl \ # Horizon workers
exif # Image metadata
RUN pecl install redis igbinary \
&& docker-php-ext-enable redis igbinary
API Platform / High-Load
RUN docker-php-ext-install -j$(nproc) \
intl \
pdo_pgsql \
opcache \
bcmath \
pcntl \
sockets
RUN pecl install redis apcu amqp igbinary msgpack \
&& docker-php-ext-enable redis apcu amqp igbinary msgpack
OPcache Configuration for Production
; /usr/local/etc/php/conf.d/opcache.ini
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.jit=tracing
opcache.jit_buffer_size=128M
COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
cannot find -licu |
Missing icu-dev | apk add icu-dev or apt install libicu-dev |
pecl install fails |
Missing $PHPIZE_DEPS | apk add $PHPIZE_DEPS |
| Extension loads but segfaults | Alpine musl incompatibility | Switch to Debian base |
Class 'Redis' not found |
Extension not enabled | docker-php-ext-enable redis |
iconv(): Wrong encoding |
Alpine musl iconv | Install gnu-libiconv |
| Slow builds | Sequential compilation | Use -j$(nproc) and BuildKit cache |
References
For the full extensions matrix with all dependencies, see references/extensions-matrix.md.
For base image selection, see acc-docker-base-images-knowledge.
Weekly Installs
1
Repository
dykyi-roman/awe…ude-codeGitHub Stars
39
First Seen
Feb 11, 2026
Installed on
opencode1
claude-code1