---
title: "Imagen Docker (Consola)"
description: "Imagen Docker (Consola)"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-08-27"
last_update: "2026-08-27"
time_minutes: 1
draft: false
unlisted: false
url: "https://core.libredte.cl/docs/docker-console"
---

# Imagen Docker (Consola)



---

## Introducción

LibreDTE Core vía consola en un contenedor

# LibreDTE Core vía consola en un contenedor

[![Publish Docker Image](https://github.com/libredte/libredte-lib-core-console/actions/workflows/publish-image.yml/badge.svg)](https://github.com/libredte/libredte-lib-core-console/actions/workflows/publish-image.yml)
[![Licencia](https://img.shields.io/badge/licencia-AGPL--3.0%2B-blue)](https://github.com/libredte/libredte-lib-core-console/blob/main/COPYING)

LibreDTE Core también se puede correr como una imagen Docker que expone cada
operación de `libredte/libredte-lib-core` como su propio comando de
[Symfony Console](https://symfony.com/doc/current/components/console.html)
(`bin/console`), invocable desde cualquier lenguaje vía `docker exec` — sin
instalar PHP en tu máquina. Construida en el repositorio
[`libredte-lib-core-console`](https://github.com/libredte/libredte-lib-core-console).

&gt; [!IMPORTANT] Importante
&gt;
&gt; A diferencia de usar la [Biblioteca PHP](https://www.derafu.dev/docs/lib), el
&gt; [Dispatcher](https://www.derafu.dev/docs/dispatcher) o el [Bridge Python](https://www.derafu.dev/docs/bridge-python)
&gt; directamente, consumir esta imagen por `docker exec` no combina tu código
&gt; con el de LibreDTE dentro de un mismo proceso: tu aplicación cliente no
&gt; queda sujeta a los términos de la [licencia AGPL](https://www.derafu.dev/docs/lib/licencia) por
&gt; el solo hecho de invocarla. Solo el software de LibreDTE que corre dentro
&gt; del contenedor debe mantenerse libre.

## Inicio rápido

La imagen no sirve nada por HTTP ni tiene ningún puerto que mapear: el
proceso principal solo mantiene el contenedor vivo para poder ejecutarle
comandos puntuales con `docker exec`.

```shell
docker run -d --restart unless-stopped \
    --name libredte-lib-core-console \
    ghcr.io/libredte/libredte-lib-core-console:latest

docker exec libredte-lib-core-console bin/console list
```

&gt; [!NOTE] Nota
&gt;
&gt; Revisa [Uso de la imagen Docker](https://www.derafu.dev/docs/docker-console/uso) para invocar
&gt; una operación real, `docker compose`, y la forma de usarla una sola vez
&gt; sin dejar nada corriendo.




---

## Uso de la imagen Docker

Uso completo de la imagen Docker

# Uso de la imagen Docker

La imagen no expone ningún puerto: no hay nada que mapear con `-p`. El
proceso principal del contenedor solo lo mantiene vivo para poder
ejecutarle comandos puntuales con `docker exec`.

## `docker run`, con la imagen ya publicada

Corriendo directo la imagen publicada en GHCR, en segundo plano:

```shell
docker run -d --restart unless-stopped \
    --name libredte-lib-core-console \
    ghcr.io/libredte/libredte-lib-core-console:latest
```

```shell
docker exec libredte-lib-core-console bin/console list
docker exec libredte-lib-core-console bin/console help billing:identifier:caf_loader:load

echo &#039;{&quot;parameters&quot;: {&quot;xml&quot;: &quot;&lt;caf&gt;...&lt;/caf&gt;&quot;}}&#039; \
    | docker exec -i libredte-lib-core-console bin/console billing:identifier:caf_loader:load
```

`-i` en el `exec` es necesario solo cuando la entrada va por STDIN (como en
el `echo` de arriba); para un archivo como argumento no hace falta:

```shell
docker cp archivo.json libredte-lib-core-console:/tmp/archivo.json
docker exec libredte-lib-core-console bin/console billing:identifier:caf_loader:load /tmp/archivo.json
```

Para ver los logs o detenerlo:

```shell
docker logs -f libredte-lib-core-console
docker stop libredte-lib-core-console
```

&gt; [!NOTE] Nota
&gt;
&gt; Revisa [Dispatcher](https://www.derafu.dev/docs/dispatcher) y el
&gt; [README de `libredte-lib-core-console`](https://github.com/libredte/libredte-lib-core-console)
&gt; para el detalle de la entrada (JSON/YAML/XML bajo `&quot;parameters&quot;`), la
&gt; respuesta (`{&quot;meta&quot;: ..., &quot;data&quot;: ...}`) y los exit codes.

## Uso único, sin dejar nada corriendo

Sobreescribiendo el `CMD` de la imagen se evita levantar un contenedor
persistente cuando solo se necesita ejecutar un comando una vez:

```shell
echo &#039;{&quot;parameters&quot;: {&quot;xml&quot;: &quot;&lt;caf&gt;...&lt;/caf&gt;&quot;}}&#039; \
    | docker run --rm -i ghcr.io/libredte/libredte-lib-core-console:latest \
        bin/console billing:identifier:caf_loader:load
```

## `docker compose`

Clonando el repositorio, `docker compose` baja la imagen ya publicada (no
la reconstruye) mientras no le pidas `--build`:

```shell
git clone git@github.com:LibreDTE/libredte-lib-core-console.git
cd libredte-lib-core-console
docker compose up -d

docker compose exec libredte-lib-core-console bin/console list
docker compose down
```

## Construir la imagen localmente

En vez de usar la publicada en GHCR:

```shell
docker build -t libredte-lib-core-console .
```




---

## Arquitectura

Cómo está armada la imagen y desarrollo sin Docker

# 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

