PreTeXt en Docker: Construcción y Ejecución

🐳 PreTeXt en Docker: Construcción y Ejecución

Este documento resume cómo construir una imagen Docker con PreTeXt, ejecutar un contenedor, y servir un libro en formato web.

El objetivo es que cualquier escritor o creador pueda trabajar en su proyecto sin complicaciones técnicas.


🐋 1. Construcción de la imagen Docker

Para generar una imagen de PreTeXt, cree un archivo llamado Dockerfile con este contenido:

# Imagen base con Python 3.11
FROM python:3.11-slim

# Instalar dependencias del sistema necesarias
RUN apt-get update && apt-get install -y \
    git \
    make \
    texlive-full \
    latexmk \
    && rm -rf /var/lib/apt/lists/*

# Instalar PreTeXt CLI
RUN pip install --no-cache-dir pretext

# Crear usuario de trabajo
WORKDIR /workspace

# Montar volúmenes al iniciar
VOLUME ["/workspace"]

# Comando por defecto
CMD ["bash"]

Ahora, en la terminal construye la imagen:

docker build -t pretext-completo .

👉 Esto creará una imagen agigantada de 10.8 GB llamada pretext-completo.

📝 Dockerfile usado para el curso:

# ==============================
# Dockerfile (Optimizado)
# PreTeXt con soporte LaTeX/PDF
# ==============================

# Imagen base oficial de Python
FROM python:3.12-slim

# Definir versión de PreTeXt como variable
ENV PTX_VERSION=2.29.2

# Instalar dependencias necesarias en una sola capa
RUN apt-get update && apt-get install -y \
    make git wget curl unzip \
    texlive-latex-base \
    texlive-fonts-recommended \
    texlive-latex-extra \
    texlive-xetex \
    texlive-lang-spanish \
    nodejs \
    npm \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Instalar PreTeXt y actualizar assets globales
RUN pip install --no-cache-dir --upgrade pip \
    && pip install --no-cache-dir pretext==${PTX_VERSION} \
    && pretext update --force || true

# Instala el castellano para las palabras claves de PreTeXt desde el repositorio del autor en GitHub
RUN mkdir -p /root/.ptx/${PTX_VERSION}/core/xsl/localizations/ \
    && curl -fsSL \
       "https://raw.githubusercontent.com/rommeljose/Libro_Generico_PreText/\
main/otros_necesarios/es-ES.xml" \
    -o /root/.ptx/${PTX_VERSION}/core/xsl/localizations/es-ES.xml

# Directorio de trabajo
WORKDIR /workspace

# Comando por defecto
CMD ["/bin/bash"]

Nota: La imagen se construye con:

docker build --no-cache -t pretext-curso -f Dockerfile.curso .

👉 Esto creará una imagen disminuida de 3,5 GB llamada pretext-curso.


📚 2. Crear un proyecto de prueba en PreTeXt

Ejecuta un contenedor interactivo:

docker run -it -v ${PWD}:/workspace pretext-es-web bash

Dentro del contenedor:

# Crear un nuevo proyecto de prueba
pretext new book new-pretext-project

cd new-pretext-project

Construir el libro en formato web:

pretext build web

Los archivos generados quedarán en:

/workspace/new-pretext-project/output/web

🌐 3. Servir el proyecto

🔹 Opción A: Usando PreTeXt directamente

Dentro del contenedor:

pretext view web -a public -p 8080 --no-launch

Esto intentará levantar el servidor en el puerto 8080.
Si no funciona correctamente (según la versión de PreTeXt), pasa a la opción B.


🔹 Opción B: Usando Python (recomendado)

Entra al directorio del libro web:

cd /workspace/new-pretext-project/output/web

Ejecuta el servidor manualmente:

python3 -m http.server 8080 --bind 0.0.0.0

🔀 4. Mapear puertos correctamente

Cuando ejecutes el contenedor, asegúrate de mapear el puerto del host al puerto del contenedor:

docker run -it -p 8080:8080 -v ${PWD}:/workspace pretext-es-web bash
  • El primer 8080 = puerto en tu PC (host).
  • El segundo 8080 = puerto dentro del contenedor.

✅ 5. Probar en el navegador

Ahora abre en tu navegador:

👉 http://localhost:8080

Deberías ver tu libro generado con PreTeXt en formato web. 🎉


🔧 6. Ejemplo alternativo de puertos

Si el 8080 ya está en uso, puedes cambiarlo:

docker run -it -p 8888:8080 -v ${PWD}:/workspace pretext-es-web bash

Y acceder en:

👉 http://localhost:8888


📝 Notas finales

  • Build: pretext build web genera el libro.
  • Serve: python3 -m http.server levanta el servidor.
  • Deploy: pretext deploy permite subir a GitHub Pages.
  • Todo esto funciona igual en Windows, Linux o Mac gracias a Docker.

Ver autoría:

✍️ Autor: Rommel Contreras
📅 Septiembre 2025