Arquitectura
La imagen se construye en 2 etapas:
- Una etapa con
composer:2que correcomposer install(sin dev-dependencies) para generarvendor/. - La etapa final, sobre
php:8.5-cli(sin FrankenPHP: esta imagen no sirve nada por HTTP), que instala las extensiones de PHP que hacen falta y copia el código junto alvendor/generado en la etapa anterior.
El proceso principal del contenedor (tail -f /dev/null) no ejecuta nada
por sí mismo — solo mantiene el contenedor vivo para que docker exec (o
un docker run que sobreescriba ese CMD) pueda invocar bin/console.
Extensiones de PHP
libredte/libredte-lib-core y sus dependencias (derafu/certificate,
derafu/signature, mpdf/mpdf, tecnickcom/tc-lib-barcode, etc.) solo
necesitan gd/intl/soap además de lo que php:8.5-cli ya trae
compilado (curl/mbstring/openssl/xml/entre otras). La imagen igual
instala el mismo set más amplio que usa
docker-php8.5-caddy-server
(la imagen de referencia con la que se desarrollan/prueban estas mismas
librerías): bcmath, exif, gd, intl, pdo_mysql, pdo_pgsql,
soap, sockets, zip — como margen de seguridad ante una futura
dependencia, sin arrastrar nada de lo específico a esa imagen (Caddy, SSH,
Supervisor, Node, Python, Redis, Xdebug), que no aplica acá.
Desarrollo sin Docker
Para modificar el código sin construir la imagen:
git clone [email protected]:LibreDTE/libredte-lib-core-console.git
cd libredte-lib-core-console
composer install
bin/console list