Este módulo enseña Docker a través de 8 ejemplos prácticos y progresivos: desde un contenedor “hello world” hasta builds multietapa con esbuild, volúmenes persistentes, Docker Compose con bases de datos y la ejecución de modelos de IA locales con Docker Model Runner. Cada ejemplo está diseñado para añadir un concepto nuevo sobre el anterior.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/midudev/jscamp/llms.txt
Use this file to discover all available pages before exploring further.
Lo que aprenderás
- Sintaxis de Dockerfile:
FROM,WORKDIR,COPY,RUN,EXPOSE,USER,CMD - Selección de imágenes base (Alpine, slim, distroless)
- Cómo funcionan las capas de imagen y por qué el orden importa para el caché
- Uso de
.dockerignorepara excluir ficheros innecesarios - Optimización de builds con BuildKit cache (
--mount=type=cache) - Multi-stage builds: compilar en una etapa y ejecutar en otra más pequeña
- Volúmenes para persistir datos entre reinicios del contenedor
- Orquestar servicios con Docker Compose
- Ejecutar modelos de lenguaje localmente con Docker Model Runner
Los 8 Ejemplos
00-por-que
Por qué usar Docker — Demuestra el problema clásico de “funciona en mi máquina” con una app Node.js que depende de la versión del entorno.
01-hola-docker
Primer contenedor — Imagen Alpine mínima con un simple
CMD ["echo", "Hola Docker"]. Introduce los conceptos de imagen y contenedor.02-node-web
App Node.js básica — Servidor Express en contenedor con
node:26-alpine. Cubre COPY, RUN npm install, EXPOSE y USER node.02b-node-web
BuildKit y cache — Usa
--mount=type=bind y --mount=type=cache para acelerar builds. Instala solo dependencias de producción con npm ci --omit=dev.03-multi-stage
Build multietapa — Compila el código con esbuild en la etapa
builder y copia solo el dist/ a la imagen final runner, sin devDependencies.04-volumes
Volúmenes — Contador de visitas persistido en un archivo del sistema de ficheros. Demuestra la diferencia entre datos efímeros y volúmenes montados.
05-ia
IA Local — Microservicio Flask que se conecta a Docker Model Runner para responder preguntas usando el modelo
ai/smollm2 (~256 MB), sin APIs externas.06-compose
Docker Compose — App Node.js + base de datos PostgreSQL definidas como servicios. Introduce
depends_on, secrets y volúmenes nombrados.El ejemplo 07-vercel incluye un
Dockerfile.vercel para desplegar una app Go en Vercel Fluid Compute, que detecta automáticamente el Dockerfile en la raíz del proyecto.Ejemplo: Multi-Stage Build
El multi-stage build es una de las técnicas más importantes para producir imágenes pequeñas y seguras. La etapabuilder compila el código; la etapa runner solo contiene lo necesario para ejecutarlo.
¿Por qué usar multi-stage?
| Imagen simple | Multi-stage | |
|---|---|---|
| Contiene devDeps | ✅ Sí | ❌ No |
| Contiene código fuente | ✅ Sí | ❌ No |
| Tamaño | Grande | Pequeño |
| Superficie de ataque | Mayor | Menor |
COPY --from=builder copia artefactos de una etapa anterior sin necesidad de instalar herramientas de build en la imagen final.
Ejemplo: BuildKit y Cache (02b-node-web)
02b-node-web/compose.yaml
--mount=type=cache,target=/root/.npm le dice a BuildKit que mantenga el caché de npm entre builds, de modo que npm ci no descarga los paquetes desde internet en cada reconstrucción.
IA Local con Docker Model Runner
El ejemplo05-ia/ levanta un microservicio Flask (Python) que reenvía las peticiones a la API local de Docker Model Runner, conectando con el modelo ai/smollm2 que corre directamente en tu hardware (Metal/CUDA).
Descargar el modelo en el host
Levantar el contenedor Flask
5002 del host mapeado al 5000 interno. Internamente se conecta a http://model-runner.docker.internal/v1/.Hacer una consulta
Docker Model Runner requiere Docker Desktop versión 2026 o posterior. Es necesario tenerlo instalado y en ejecución para que el DNS interno
model-runner.docker.internal resuelva correctamente desde dentro del contenedor.Comandos Docker Esenciales
Resumen de Dockerfiles del Módulo
| Ejemplo | Base image | Técnica principal |
|---|---|---|
00-por-que | node:22-alpine | Problema del entorno |
01-hola-docker | alpine | CMD echo básico |
02-node-web | node:26-alpine | App Express básica |
02b-node-web | node:26-alpine | BuildKit cache mounts |
03-multi-stage | node:22-alpine (x2) | Builder + Runner |
04-volumes | node:22-alpine | Persistencia en fichero |
05-ia | python:3.12-slim | Docker Model Runner |
06-compose | node:22-alpine | Compose + PostgreSQL |
07-vercel | golang:1.24-alpine (x2) | Multi-stage + Vercel Fluid |