PHP CLI Image
Produktionsreifes Docker-Image für PHP-CLI-Anwendungen: Worker, Cron-Jobs, Kafka-Consumer, Deployment-Skripte. Multi-Arch, 20+ Extensions, OPcache + JIT, Runtime-Konfiguration über ENV.
Überblick
headgent/phpcli ist ein Multi-Stage Alpine-Image für alle PHP-Prozesse, die keinen Webserver brauchen. Das Image enthält einen vollständigen Extension-Stack (Datenbank, Messaging, Caching, Media) und lässt sich ohne Rebuild über 30+ Environment-Variablen konfigurieren.
GitHub: jardisOps/phpcli
| Eigenschaft | Wert |
|---|---|
| PHP-Versionen | 8.2, 8.3, 8.4 |
| Architekturen | linux/amd64, linux/arm64 |
| Image-Größe | ~142–148 MB (komprimiert) |
| Basis | Alpine 3.23 |
| Composer | 2.9.5 (gepinnt) |
Installation
docker pull headgent/phpcli:8.4Verfügbare Tags: 8.2, 8.3, 8.4, latest (= 8.4).
Quick Start
# docker-compose.yml
services:
worker:
image: headgent/phpcli:8.4
volumes:
- ./:/app
environment:
PHP_MEMORY_LIMIT: 256M
XDEBUG_MODE: "off"
command: php /app/bin/worker.phpExtensions
Datenbank
| Extension | Typ | Beschreibung |
|---|---|---|
| pdo | Built-in | PDO-Abstraktion |
| pdo_mysql | Built-in | MySQL / MariaDB |
| mysqli | Built-in | MySQL (prozedural) |
| pdo_pgsql | Built-in | PostgreSQL |
Messaging & Caching
| Extension | Typ | Version | Beschreibung |
|---|---|---|---|
| amqp | PECL | 2.2.0 | RabbitMQ AMQP 0-9-1 |
| rdkafka | PECL | 6.0.5 | Apache Kafka Client |
| apcu | PECL | 5.1.28 | In-Memory User Cache |
| redis | PECL | 6.3.0 | Redis Client |
| opcache | Built-in | — | Bytecode-Cache + JIT |
Web, I/O & Daten
| Extension | Typ | Beschreibung |
|---|---|---|
| curl | Built-in | HTTP-Client |
| soap | Built-in | SOAP Web Services |
| sockets | Built-in | Netzwerk-Sockets |
| dom | Built-in | XML-Verarbeitung |
| zip | Built-in | Archiv-Manipulation |
| mbstring | Built-in | Multi-Byte Strings |
| intl | Built-in | Internationalisierung |
| bcmath | Built-in | Beliebige Genauigkeit |
Media & Prozesse
| Extension | Typ | Beschreibung |
|---|---|---|
| gd | Built-in | Bildgenerierung (FreeType + JPEG) |
| exif | Built-in | Bild-Metadaten |
| pcntl | Built-in | Prozess-Steuerung (Signale) |
Debugging & Coverage
| Extension | Typ | Version | Beschreibung |
|---|---|---|---|
| xdebug | PECL | 3.5.1 | Step-Debugging + Profiling |
| pcov | PECL | 1.0.12 | Schnelle Code-Coverage |
Konfiguration
Alle Werte sind über Environment-Variablen steuerbar, ohne Rebuild.
PHP Core
| Variable | Default | Beschreibung |
|---|---|---|
PHP_MEMORY_LIMIT | 512M | Speicherlimit |
PHP_MAX_EXECUTION_TIME | 0 | Max. Ausführungszeit (0 = unbegrenzt) |
PHP_TIMEZONE | UTC | Zeitzone |
PHP_ERROR_REPORTING | E_ALL & ~E_DEPRECATED & ~E_STRICT | Error-Reporting-Level |
PHP_DISPLAY_ERRORS | Off | Fehler anzeigen |
PHP_LOG_ERRORS | On | Fehler loggen |
OPcache & JIT
| Variable | Default | Beschreibung |
|---|---|---|
OPCACHE_MEMORY_CONSUMPTION | 128 | OPcache-Speicher (MB) |
OPCACHE_MAX_ACCELERATED_FILES | 4000 | Max. gecachte Dateien |
OPCACHE_REVALIDATE_FREQ | 2 | Revalidierung (Sekunden) |
OPCACHE_JIT | 1254 | JIT-Modus (Tracing) |
OPCACHE_JIT_BUFFER_SIZE | 128M | JIT-Buffer |
APCu
| Variable | Default | Beschreibung |
|---|---|---|
APCU_SHM_SIZE | 64M | Shared-Memory-Größe |
Xdebug
| Variable | Default | Beschreibung |
|---|---|---|
XDEBUG_MODE | debug | Modus (off, debug, profile, trace, coverage) |
XDEBUG_START_WITH_REQUEST | yes | Auto-Start |
XDEBUG_CLIENT_HOST | host.docker.internal | IDE-Host |
XDEBUG_CLIENT_PORT | 9003 | IDE-Port |
XDEBUG_LOG_LEVEL | 0 | Log-Level (0–10) |
PCOV
| Variable | Default | Beschreibung |
|---|---|---|
PCOV_ENABLED | 0 | Coverage aktivieren (0/1) |
PCOV vs. Xdebug
Wenn PCOV_ENABLED=1 gesetzt wird, deaktiviert das Entrypoint-Skript automatisch Xdebug (XDEBUG_MODE=off). PCOV ist ~2× schneller als Xdebug für Code-Coverage.
Sicherheit
- Non-Root-Execution — Container startet als Root für UID/GID-Anpassung, führt dann als
appuseraus - Automatische UID/GID-Anpassung — erkennt den Owner des gemounteten
/app-Volumes und passtappuseran expose_php = Off— PHP-Version wird nicht in HTTP-Headern exponiert- Healthcheck — validiert PHP und Composer
Build-Argumente
Für Custom-Builds können diese Argumente beim Build übergeben werden:
| Argument | Default | Beschreibung |
|---|---|---|
PHP_VERSION | 8.3 | PHP-Version |
ALPINE_VERSION | 3.23 | Alpine-Basis |
COMPOSER_VERSION | 2.9.5 | Composer-Version |
PUID / PGID | 1000 | User/Group-ID |
INSTALL_DB_CLIENTS | (leer) | DB-Clients: mysql,postgres,sqlite |
APCU_VERSION | 5.1.28 | PECL-Version |
REDIS_VERSION | 6.3.0 | PECL-Version |
XDEBUG_VERSION | 3.5.1 | PECL-Version |
PCOV_VERSION | 1.0.12 | PECL-Version |
AMQP_VERSION | 2.2.0 | PECL-Version |
RDKAFKA_VERSION | 6.0.5 | PECL-Version |
Makefile
| Target | Beschreibung |
|---|---|
make build | Lokaler Build für aktuelle PHP_VERSION |
make build-all | Alle PHP-Versionen lokal bauen |
make build-remote-all | Alle Versionen multi-arch bauen und pushen |
make build-remote-version | Eine Version multi-arch bauen und pushen |
make test-all | Alle Tests auf beiden Architekturen |
make test-extensions | Extensions auf beiden Architekturen prüfen |
make test-opcache | OPcache + JIT verifizieren |
make shell | Interaktive Shell im Container |
make clean | Container, Images und Cache aufräumen |
make info | Aktuelle Build-Konfiguration anzeigen |
Use Cases
- Laravel/Symfony Worker — Queue-Consumer, Scheduled Commands
- Kafka/RabbitMQ Consumer — Event-gesteuerte Microservices
- Cron-Jobs — Geplante Aufgaben im Container
- Deployment-Skripte — Migrations, Seed-Daten, Cache-Warmup
- CI/CD — Test-Runner mit PCOV für schnelle Coverage