Esta es una referencia rápida de todos los comandos Docker y las instrucciones Dockerfile cubiertas en el módulo 10 de JSCamp. Incluye los ejemplos reales del repositorio: el multi-stage build para la app de producción, la configuración de Docker Compose y el uso del cache de BuildKit para acelerar las builds.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.
Comandos Docker Esenciales
Imágenes
| Comando | Descripción |
|---|---|
docker build -t <nombre> . | Construye una imagen a partir del Dockerfile en el directorio actual y la etiqueta con <nombre>. |
docker build -t <nombre>:<tag> . | Construye la imagen con una etiqueta de versión específica (p. ej. myapp:1.0). |
docker images | Lista todas las imágenes almacenadas localmente. |
docker rmi <imagen> | Elimina una imagen local por nombre o ID. |
docker pull <imagen> | Descarga una imagen desde Docker Hub (o un registry configurado). |
docker tag <origen> <destino> | Crea un alias (tag) para una imagen existente. |
Contenedores
| Comando | Descripción |
|---|---|
docker run -p <host>:<contenedor> <imagen> | Ejecuta un contenedor mapeando el puerto <host> al puerto <contenedor>. |
docker run -d <imagen> | Ejecuta el contenedor en segundo plano (detached mode). |
docker run --rm <imagen> | Ejecuta el contenedor y lo elimina automáticamente al terminar. |
docker run --env-file .env <imagen> | Pasa variables de entorno desde un archivo .env. |
docker ps | Lista los contenedores en ejecución actualmente. |
docker ps -a | Lista todos los contenedores (incluidos los detenidos). |
docker stop <id> | Detiene un contenedor en ejecución de forma controlada (SIGTERM). |
docker kill <id> | Fuerza la detención inmediata de un contenedor (SIGKILL). |
docker rm <id> | Elimina un contenedor detenido. |
docker rm -f <id> | Fuerza la eliminación aunque el contenedor esté en ejecución. |
docker logs <id> | Muestra los logs de salida estándar del contenedor. |
docker logs -f <id> | Sigue los logs en tiempo real (follow). |
docker exec -it <id> sh | Abre una shell interactiva dentro del contenedor en ejecución. |
docker inspect <id> | Muestra metadata completa del contenedor en JSON. |
Docker Compose
| Comando | Descripción |
|---|---|
docker compose up | Levanta todos los servicios definidos en compose.yaml. |
docker compose up -d | Levanta los servicios en segundo plano. |
docker compose up --build | Reconstruye las imágenes antes de levantar los servicios. |
docker compose down | Detiene y elimina los contenedores y redes creados. |
docker compose down -v | Elimina también los volúmenes. |
docker compose logs -f | Sigue los logs de todos los servicios. |
docker compose ps | Lista el estado de los servicios definidos en Compose. |
docker compose exec <servicio> sh | Abre una shell en el contenedor del servicio indicado. |
Docker Model Runner (módulo IA)
| Comando | Descripción |
|---|---|
docker model pull <modelo> | Descarga un modelo de IA desde Docker Hub (p. ej. ai/smollm2). |
docker model run <modelo> | Ejecuta un modelo de IA de forma interactiva en la CLI. |
docker model ls | Lista los modelos descargados localmente. |
docker model rm <modelo> | Elimina un modelo descargado. |
docker model es una subcomando nativo de Docker Desktop (desde la versión 2026 en adelante) que permite descargar y ejecutar modelos de lenguaje optimizados para la GPU local (Metal/CUDA) sin necesidad de herramientas externas como Ollama.Instrucciones Dockerfile
| Instrucción | Descripción |
|---|---|
FROM <imagen> | Define la imagen base. Toda imagen empieza con FROM. En multi-stage se puede añadir AS <nombre>. |
WORKDIR <ruta> | Establece el directorio de trabajo. Crea la carpeta si no existe. |
COPY <origen> <destino> | Copia archivos desde el contexto de build hacia la imagen. |
ADD <origen> <destino> | Como COPY pero además descomprime archivos .tar y acepta URLs remotas. |
RUN <comando> | Ejecuta un comando en tiempo de build y crea una nueva capa. |
CMD <comando> | Comando por defecto al ejecutar el contenedor. Solo el último CMD tiene efecto. |
ENTRYPOINT <comando> | Punto de entrada del contenedor. Se combina con CMD para pasar argumentos. |
ENV <clave>=<valor> | Define variables de entorno disponibles en build-time y run-time. |
ARG <nombre>[=<valor>] | Define un argumento solo disponible en tiempo de build (no en run-time). |
EXPOSE <puerto> | Documenta el puerto en el que escucha el contenedor. No lo publica automáticamente. |
USER <usuario> | Cambia el usuario con el que se ejecutan los siguientes comandos (seguridad). |
VOLUME <ruta> | Declara un punto de montaje para datos persistentes. |
LABEL <clave>=<valor> | Añade metadatos a la imagen (autor, versión, etc.). |
HEALTHCHECK <comando> | Define un comando para comprobar que el contenedor está sano. |
.dockerignore | Archivo (no instrucción) que excluye archivos del contexto de build. |
Ejemplo: Multi-Stage Build
El archivo10-docker/03-multi-stage/Dockerfile separa la build en dos etapas: builder (compilación) y runner (ejecución). La imagen final solo contiene el artefacto compilado, no las devDependencies ni el código fuente TypeScript.
Imagen más pequeña
La imagen final no incluye TypeScript, ts-node, herramientas de test ni
devDependencies. Puede pasar de ~500 MB a menos de 100 MB.Mayor seguridad
El código fuente TypeScript y las credenciales de build nunca llegan a la imagen de producción.
Separación de concerns
La etapa
builder puede tener cualquier herramienta necesaria para compilar sin contaminar la imagen final.Cache eficiente
Docker cachea cada etapa de forma independiente. Si no cambias el
package.json, la instalación de dependencias se reutiliza del cache.Ejemplo: Docker Compose
El archivo10-docker/02b-node-web/compose.yaml define un servicio Node.js listo para producción:
services
services
Bloque raíz que contiene la definición de todos los servicios. Cada clave es el nombre del servicio y actúa también como hostname resolvible dentro de la red Docker interna.
build.context
build.context
Directorio que se envía al daemon de Docker como contexto de build. Docker buscará el
Dockerfile dentro de este directorio. Puede ser una ruta relativa o absoluta.environment
environment
Variables de entorno disponibles dentro del contenedor en tiempo de ejecución. Equivale a
docker run -e NODE_ENV=production. También se puede referenciar un archivo con env_file: .env.ports
ports
Mapeo de puertos en formato
<host>:<contenedor>. El tráfico que llega al puerto 3000 del host se redirige al puerto 3000 dentro del contenedor.BuildKit: Cache Mount y Bind Mount
ElDockerfile de 10-docker/02b-node-web/ usa la sintaxis avanzada de BuildKit para optimizar la instalación de dependencias:
--mount=type=bind
Monta un archivo del contexto de build directamente en el sistema de archivos de la capa RUN sin copiarlo a la imagen. Se usa para que npm ci pueda leer package.json y package-lock.json sin necesidad de un COPY previo. La ventaja es que esos archivos no generan una capa adicional en la imagen.
| Opción | Descripción |
|---|---|
source | Ruta en el contexto de build (tu máquina local). |
target | Ruta dentro del contenedor donde se monta. |
readonly | (opcional) Impide escrituras en el archivo montado. |
--mount=type=cache
Monta un directorio de caché persistente entre builds. El directorio no se incluye en la imagen final, pero Docker lo conserva entre ejecuciones para reutilizarlo.
| Opción | Descripción |
|---|---|
target | Directorio a cachear (aquí, la caché de npm en /root/.npm). |
id | (opcional) Identificador del caché; permite compartirlo entre stages. |
sharing | (opcional) shared (por defecto), private o locked. |
package.json no cambia entre builds, npm ci reutiliza el caché de módulos y la descarga es casi instantánea. Esto puede reducir el tiempo de build de minutos a segundos.