43 lines
2.3 KiB
Docker
43 lines
2.3 KiB
Docker
|
|
# ===========================================
|
||
|
|
# 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"]
|