---
title: "Arquitectura"
description: "Cómo está armada la imagen y desarrollo sin Docker"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-08-27"
last_update: "2026-08-27"
time_minutes: 2
draft: false
unlisted: false
url: "https://core.libredte.cl/docs/docker-console/arquitectura"
---

# Arquitectura

La imagen se construye en 2 etapas:

1. Una etapa con `composer:2` que corre `composer install` (sin
   dev-dependencies) para generar `vendor/`.
2. 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 al `vendor/` 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`](https://github.com/derafu/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:

```shell
git clone git@github.com:LibreDTE/libredte-lib-core-console.git
cd libredte-lib-core-console
composer install
bin/console list
```



---
Last updated on 27/08/2026

