# Ejemplo con Docker

Esta página explica una configuración mínima y práctica con Docker que:

1. Ejecuta un escenario `.pmod` dentro de un contenedor **CPU**
2. Escribe archivos de salida en una carpeta montada desde tu equipo (host)

Carpeta de ejemplo:

`docker/augelab_docker_mount_example_cpu/`

***

## Qué obtienes

* Un `Dockerfile` funcional que ejecuta un script Python en modo headless
* Un `docker-compose.yml` que monta una carpeta del host dentro del contenedor en `/app/app_output`
* Un ejemplo listo para ejecutar `.pmod` (`save_image_no_args.pmod`)

***

## Archivos en la carpeta de ejemplo

Dentro de `docker/augelab_docker_mount_example_cpu/`:

* `docker-compose.yml` — construye la imagen y monta una carpeta del host
* `app/Dockerfile` — usa una imagen base CPU de AugeLab Studio y ejecuta un script Python
* `app/file_save.py` — carga el `.pmod` y lo ejecuta
* `app/save_image_no_args.pmod` — un escenario de ejemplo

***

## Paso a paso

### 1) Elige una carpeta de salida en tu host

Elige (o crea) una carpeta en tu máquina donde el contenedor tenga permiso para escribir archivos.

Ejemplos:

* Windows: `C:/work/augelab_output`
* Linux/macOS: `/home/<usuario>/augelab_output`

***

### 2) Actualiza el mapeo de volúmenes en `docker-compose.yml`

Abre `docker/augelab_docker_mount_example_cpu/docker-compose.yml` y cambia la línea de volúmenes:

```yaml
volumes:
	# <local mounted folder>:<container mounted folder>
	- "C:/work/augelab_output:/app/app_output"
```

Alternativamente, puedes usar una carpeta **relativa** (recomendado para proyectos portables):

```yaml
volumes:
	- "./output_on_host:/app/app_output"
```

{% hint style="warning" %}
En Windows, Docker espera rutas con barras hacia adelante como `C:/...`. Evita las barras invertidas.
{% endhint %}

***

### 3) Proporciona la licencia (verification code o archivo de licencia)

Tu script debe pasar un `verification_code` al crear `StudioScenario`.

Opciones recomendadas:

#### Opción A (recomendada): variable de entorno

Exporta una variable de entorno y recupérala en tu código Python.

Agregar a `docker-compose.yml`:

```yaml
environment:
	- AUGELAB_VERIFICATION_CODE=YOUR_CODE_HERE
```

Luego en el script, usa:

```python
import os
from studio import StudioScenario

scenario = StudioScenario(verification_code=os.environ["AUGELAB_VERIFICATION_CODE"])
```

#### Opción B: montar un archivo de licencia y pasar su ruta

Monta tu archivo de licencia en el contenedor y pasa la **ruta dentro del contenedor** como `verification_code`.

Ejemplo:

```yaml
volumes:
	- "C:/path/to/license_file:/app/license_file:ro"
environment:
	- AUGELAB_VERIFICATION_CODE=/app/license_file
```

***

### 4) Construir y ejecutar

Desde la carpeta que contiene `docker-compose.yml` ejecuta:

```bash
cd docker/augelab_docker_mount_example_cpu
docker compose up --build
```

Verás los logs y el resultado de la ejecución del escenario en la salida del contenedor.

***

### 5) Verifica la carpeta de salida en el host

Revisa la carpeta del host que montaste en `/app/app_output`.

Si tu `.pmod` escribe archivos (imágenes, informes, etc.) en esa ruta de salida, deberías verlos aparecer en el host de forma inmediata.

{% hint style="info" %}
Si no ves archivos en el host, verifica que tu `.pmod` esté configurado para escribir en `/app/app_output` (o ajusta el punto de montaje para que coincida con tu escenario).
{% endhint %}
