43 lines
2.3 KiB
Docker
Raw Permalink Normal View History

2025-09-11 07:17:37 -03:00
# ===========================================
# DOCKERFILE PARA APLICACIÓN FRONTEND NODE.JS
# ===========================================
# Usamos una imagen base ligera de Node.js 18 basada en Alpine Linux
# Alpine es una distribución Linux muy pequeña (~5MB) que reduce el tamaño de la imagen
# node:18-alpine incluye Node.js 18 y npm, las herramientas necesarias para aplicaciones JavaScript
FROM node:18-alpine
# Establecemos el directorio de trabajo dentro del contenedor
# Todas las operaciones posteriores (COPY, RUN, CMD) se ejecutarán desde este directorio
# /usr/src/app es una convención común para aplicaciones en contenedores
WORKDIR /usr/src/app
# Copiamos SOLO los archivos package.json y package-lock.json (si existe)
# El patrón package*.json copia ambos archivos: package.json y package-lock.json
# Esto se hace ANTES de copiar el resto del código para aprovechar la caché de Docker
# Si solo cambia el código fuente (no las dependencias), Docker reutiliza la capa de npm install
COPY package*.json ./
# Instalamos las dependencias de Node.js definidas en package.json
# npm install lee package.json y descarga todas las dependencias listadas
# Se ejecuta en esta capa para que Docker pueda cachear el resultado
# Si las dependencias no cambian, esta capa se reutiliza en builds posteriores
RUN npm install
# Copiamos TODO el resto del código de la aplicación al contenedor
# El primer punto (.) representa el directorio actual del host (donde está el Dockerfile)
# El segundo punto (.) representa el directorio de trabajo del contenedor (/usr/src/app)
# Esto incluye index.js, archivos estáticos, etc. (excluyendo lo que esté en .dockerignore)
COPY . .
# Exponemos el puerto 3000 que usará la aplicación web
# Esta instrucción es solo documentativa - no abre el puerto automáticamente
# El puerto se abre realmente cuando se ejecuta el contenedor con -p o en docker-compose
# Es una buena práctica documentar qué puertos usa la aplicación
EXPOSE 3000
# Comando por defecto para iniciar la aplicación cuando se ejecute el contenedor
# Se ejecuta automáticamente cuando se inicia el contenedor (a menos que se sobrescriba)
# Formato de array: ["comando", "argumento1", "argumento2"]
# node index.js ejecutará el archivo index.js con el runtime de Node.js
CMD ["node", "index.js"]