Manchmal stolpere ich über Docker-Setups, die Dinge installieren. Auch Dinge wie Dev-Dependencies (XDebug allem voran). Nun habe ich mich gefragt, ob man das vermeiden kann.
Hier ein Ansatz dazu:
ARG XDEBUG_ENABLED=false
RUN if [[ $XDEBUG_ENABLED = true ]]; \
then apk add --no-cache linux-headers && pecl install xdebug && docker-php-ext-enable xdebug; \
else echo 'Build without XDEBUG'; \
fi
Übersetzt heißt das: Prüfe, ob das Build-Argument XDEBUG_ENABLED
auf true
gesetzt ist. Falls ja, installiere XDebug. Andernfalls teile mit, dass XDebug nicht installiert wurde.
Kurz gesagt, es bietet die Flexibilität, XDebug bei Bedarf während des Builds zu aktivieren, ohne es standardmäßig zu installieren.
Gesteuert wird das Ganze via Build-Argument, z. B.:
docker build --build-arg XDEBUG_ENABLED=true -t my-php-app .
Oder via Docker Compose:
services:
...
build:
...
args:
XDEBUG_ENABLED: true
Fazit
Die Lösung ist für Docker-Profis vermutlich ein No-Brainer. Für mich eröffnet es eine neue Welt.
Auch hier gilt: Es führen viele Wege nach Rom. Mir persönlich waren zwei Dinge wichtig:
- Einfachheit – Es sollte verständlich sein, was passiert und wo es passiert.
- Konfigurierbarkeit – Es sollte explizit möglich sein, XDebug zu installieren oder nicht, z. B. für Coverage oder Profiling/Tracing.
Und das sehe ich hier.
Schreibe einen Kommentar