Contenerización de JavaScript: Docker para Node.js y el frontend

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué tu proyecto JavaScript merece Docker?

\n\n

¿Alguna vez has escuchado la frase: «¡En mi máquina funcionaba!»? Si eres desarrollador JavaScript, seguramente te has encontrado con la situación en la que la aplicación funciona perfectamente de forma local, pero en el servidor o en el ordenador de un colega falla con un error misterioso. La contenerización de aplicaciones JavaScript con Docker resuelve este problema de una vez por todas.

\n\n

Docker te permite empaquetar tu código, todas las dependencias (paquetes npm), variables de entorno e incluso la versión de Node.js en un «contenedor» ligero. Este contenedor funcionará igual en tu portátil, en un servidor en AWS y en el ordenador de un principiante que acaba de instalar Git. En este artículo, veremos cómo hacer que JavaScript y Docker funcionen juntos, escribiremos código real y crearemos una imagen lista para producción para tu próximo proyecto personal.

\n\n

Fundamentos de Docker para el desarrollador JavaScript

\n\n

Antes de sumergirnos en el código, aclaremos los conceptos clave. Docker es como una máquina virtual, pero mucho más ligera. En lugar de emular un sistema operativo completo, utiliza el núcleo del host y aísla solo tu aplicación.

\n\n

Dockerfile: la receta de tu aplicación

\n\n

Este es un archivo de texto en el que describes cómo construir la imagen. Para una aplicación Node.js, un Dockerfile típico se ve así:

\n\n
# Usamos la imagen oficial de Node.js\nFROM node:18-alpine\n\n# Establecemos el directorio de trabajo dentro del contenedor\nWORKDIR /app\n\n# Copiamos package.json y package-lock.json\nCOPY package*.json ./\n\n# Instalamos las dependencias\nRUN npm ci --only=production\n\n# Copiamos el código fuente\nCOPY . .\n\n# Abrimos el puerto\nEXPOSE 3000\n\n# Comando para ejecutar\nCMD ["node", "server.js"]
\n\n

Observa: primero copiamos package.json y luego todo el código. Esto no es casualidad. Docker almacena en caché las capas, y si no has cambiado las dependencias, el paso npm ci no se reiniciará con cada cambio de código. Esto acelera enormemente la compilación.

\n\n

Imágenes y contenedores

\n\n
    \n
  • Imagen (Image) — es una plantilla. La construyes una vez.
  • \n
  • Contenedor (Container) — es una instancia en ejecución de la imagen. Puedes crear 10 contenedores a partir de una sola imagen.
  • \n
\n\n

Creando una aplicación Node.js desde cero y contenerizándola

\n\n

Escribamos una aplicación Express simple y la empaquetemos en Docker. Este será nuestro primer paso práctico en la contenerización de JavaScript.

\n\n

Paso 1: Escribimos la aplicación

\n\n

Crea una carpeta docker-node-app y dentro, el archivo server.js:

\n\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.json({ \n    message: '¡Hola desde el contenedor!',\n    nodeVersion: process.version,\n    environment: process.env.NODE_ENV || 'development'\n  });\n});\n\napp.listen(PORT, () => {\n  console.log(`Servidor iniciado en el puerto ${PORT}`);\n});
\n\n

Inicializamos npm e instalamos express:

\n\n
npm init -y\nnpm install express
\n\n

Ahora tenemos una aplicación funcional. Ejecútala localmente: node server.js. Abre http://localhost:3000 — verás un JSON.

\n\n

Paso 2: Creamos el Dockerfile

\n\n

Crea un archivo Dockerfile (sin extensión) en la raíz del proyecto:

\n\n
FROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nEXPOSE 3000\nCMD ["node", "server.js"]
\n\n

Añadimos un .dockerignore para no copiar archivos innecesarios a la imagen:

\n\n
node_modules\nnpm-debug.log\n.git\n.gitignore\n.env\nDockerfile
\n\n

Paso 3: Construimos y ejecutamos

\n\n

Abre la terminal en la carpeta del proyecto y ejecuta:

\n\n
docker build -t my-node-app .\ndocker run -p 3000:3000 my-node-app
\n\n

La bandera

Blogs

Book Recommendations