- Remove composer.lock from .gitignore so it is tracked and included in
the build context; without it composer install resolves fresh versions
on every CI build, causing cache/vendor mismatches that produce the
RewindableGenerator and LazyGhostTrait runtime errors in prod
- Install the intl PHP extension in the base stage to remove the
Symfony startup deprecation warning; icu-dev and libzip-dev are only
kept for the compile step, then deleted to keep the layer lean
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Run cache:warmup in the build stage so containers start with a
pre-built Symfony kernel and DI container
- Scope the cache volume to var/cache/prod/pools where Symfony writes
pool data, preserving the warmed kernel across container restarts
- Add docker-compose.prod.yml for deploying the registry image without
the dev override being picked up automatically
- Expand .dockerignore to exclude vendor/, tests/, docs, compose files,
and env files from the build context
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace php:8.4-cli-alpine3.21 with dunglas/frankenphp:1-php8.4-alpine.
No Go toolchain required — the official image ships as a pre-compiled
Alpine binary.
- Drop docker-php-ext-install opcache (FrankenPHP enables it by default)
- Both dev and final stages run frankenphp run --config /etc/caddy/Caddyfile
- Dev stage bakes in Caddyfile.dev (no worker mode, Xdebug compatible)
- Final stage bakes in production Caddyfile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>