Skip to content

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

EigenschaftWert
PHP-Versionen8.2, 8.3, 8.4
Architekturenlinux/amd64, linux/arm64
Image-Größe~142–148 MB (komprimiert)
BasisAlpine 3.23
Composer2.9.5 (gepinnt)

Installation

bash
docker pull headgent/phpcli:8.4

Verfügbare Tags: 8.2, 8.3, 8.4, latest (= 8.4).

Quick Start

yaml
# 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.php

Extensions

Datenbank

ExtensionTypBeschreibung
pdoBuilt-inPDO-Abstraktion
pdo_mysqlBuilt-inMySQL / MariaDB
mysqliBuilt-inMySQL (prozedural)
pdo_pgsqlBuilt-inPostgreSQL

Messaging & Caching

ExtensionTypVersionBeschreibung
amqpPECL2.2.0RabbitMQ AMQP 0-9-1
rdkafkaPECL6.0.5Apache Kafka Client
apcuPECL5.1.28In-Memory User Cache
redisPECL6.3.0Redis Client
opcacheBuilt-inBytecode-Cache + JIT

Web, I/O & Daten

ExtensionTypBeschreibung
curlBuilt-inHTTP-Client
soapBuilt-inSOAP Web Services
socketsBuilt-inNetzwerk-Sockets
domBuilt-inXML-Verarbeitung
zipBuilt-inArchiv-Manipulation
mbstringBuilt-inMulti-Byte Strings
intlBuilt-inInternationalisierung
bcmathBuilt-inBeliebige Genauigkeit

Media & Prozesse

ExtensionTypBeschreibung
gdBuilt-inBildgenerierung (FreeType + JPEG)
exifBuilt-inBild-Metadaten
pcntlBuilt-inProzess-Steuerung (Signale)

Debugging & Coverage

ExtensionTypVersionBeschreibung
xdebugPECL3.5.1Step-Debugging + Profiling
pcovPECL1.0.12Schnelle Code-Coverage

Konfiguration

Alle Werte sind über Environment-Variablen steuerbar, ohne Rebuild.

PHP Core

VariableDefaultBeschreibung
PHP_MEMORY_LIMIT512MSpeicherlimit
PHP_MAX_EXECUTION_TIME0Max. Ausführungszeit (0 = unbegrenzt)
PHP_TIMEZONEUTCZeitzone
PHP_ERROR_REPORTINGE_ALL & ~E_DEPRECATED & ~E_STRICTError-Reporting-Level
PHP_DISPLAY_ERRORSOffFehler anzeigen
PHP_LOG_ERRORSOnFehler loggen

OPcache & JIT

VariableDefaultBeschreibung
OPCACHE_MEMORY_CONSUMPTION128OPcache-Speicher (MB)
OPCACHE_MAX_ACCELERATED_FILES4000Max. gecachte Dateien
OPCACHE_REVALIDATE_FREQ2Revalidierung (Sekunden)
OPCACHE_JIT1254JIT-Modus (Tracing)
OPCACHE_JIT_BUFFER_SIZE128MJIT-Buffer

APCu

VariableDefaultBeschreibung
APCU_SHM_SIZE64MShared-Memory-Größe

Xdebug

VariableDefaultBeschreibung
XDEBUG_MODEdebugModus (off, debug, profile, trace, coverage)
XDEBUG_START_WITH_REQUESTyesAuto-Start
XDEBUG_CLIENT_HOSThost.docker.internalIDE-Host
XDEBUG_CLIENT_PORT9003IDE-Port
XDEBUG_LOG_LEVEL0Log-Level (0–10)

PCOV

VariableDefaultBeschreibung
PCOV_ENABLED0Coverage 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 appuser aus
  • Automatische UID/GID-Anpassung — erkennt den Owner des gemounteten /app-Volumes und passt appuser an
  • 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:

ArgumentDefaultBeschreibung
PHP_VERSION8.3PHP-Version
ALPINE_VERSION3.23Alpine-Basis
COMPOSER_VERSION2.9.5Composer-Version
PUID / PGID1000User/Group-ID
INSTALL_DB_CLIENTS(leer)DB-Clients: mysql,postgres,sqlite
APCU_VERSION5.1.28PECL-Version
REDIS_VERSION6.3.0PECL-Version
XDEBUG_VERSION3.5.1PECL-Version
PCOV_VERSION1.0.12PECL-Version
AMQP_VERSION2.2.0PECL-Version
RDKAFKA_VERSION6.0.5PECL-Version

Makefile

TargetBeschreibung
make buildLokaler Build für aktuelle PHP_VERSION
make build-allAlle PHP-Versionen lokal bauen
make build-remote-allAlle Versionen multi-arch bauen und pushen
make build-remote-versionEine Version multi-arch bauen und pushen
make test-allAlle Tests auf beiden Architekturen
make test-extensionsExtensions auf beiden Architekturen prüfen
make test-opcacheOPcache + JIT verifizieren
make shellInteraktive Shell im Container
make cleanContainer, Images und Cache aufräumen
make infoAktuelle 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