Docker y JavaScript: contenedorización de aplicaciones Node.js desde cero

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

Docker y JavaScript: Guía completa para la contenedorización de aplicaciones Node.js



El desarrollo web moderno es impensable sin la contenedorización. Docker se ha convertido en el estándar de facto para empaquetar, distribuir y ejecutar aplicaciones en entornos aislados. En este artículo, analizaremos en detalle cómo usar Docker para contenedorizar aplicaciones JavaScript en Node.js. Aprenderá a crear un Dockerfile optimizado, gestionar imágenes y contenedores, y conocerá las mejores prácticas.



¿Qué es Docker y por qué lo necesita un desarrollador de JavaScript?



Docker es una plataforma para desarrollar, distribuir y ejecutar aplicaciones en contenedores. Un contenedor es un entorno ejecutable, ligero y autónomo que contiene todo lo necesario para que funcione una aplicación: código, runtime, herramientas del sistema, bibliotecas y configuraciones.



Para un desarrollador de JavaScript que trabaja con Node.js, Docker resuelve varios problemas clave:



  • Reproducibilidad del entorno: "En mi máquina funciona" ya no es un problema. Docker garantiza que la aplicación funcione igual en el ordenador del desarrollador, en el servidor CI/CD y en producción.
  • Aislamiento de dependencias: Cada aplicación obtiene su propio conjunto de dependencias, sin entrar en conflicto con otros proyectos.
  • Simplificación del despliegue: Una imagen de Docker se puede ejecutar fácilmente en cualquier plataforma que admita Docker (Linux, Windows, macOS, servidores en la nube).
  • Escalabilidad: Los contenedores se escalan horizontalmente fácilmente con orquestadores como Docker Compose o Kubernetes.


Creación de un Dockerfile para una aplicación Node.js



Un Dockerfile es un archivo de texto con instrucciones para construir una imagen de Docker. Veamos la creación paso a paso de un Dockerfile para una aplicación Express.js típica.



Supongamos que tenemos una aplicación Node.js simple con la siguiente estructura:



my-node-app/├── package.json├── package-lock.json├── src/│   └── index.js└── Dockerfile


Contenido de src/index.js:



const express = require('express');const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.send('Hello from Dockerized Node.js!');});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


Ahora creemos el Dockerfile:



# Usamos la imagen oficial de Node.js versión 18 (LTS)FROM node:18-alpine

# Establecemos el directorio de trabajo dentro del contenedorWORKDIR /usr/src/app

# Copiamos los archivos package.json y package-lock.jsonCOPY package*.json ./

# Instalamos las dependencias de la aplicaciónRUN npm ci --only=production

# Copiamos el código fuente de la aplicaciónCOPY . .

# Indicamos el puerto que escuchará la aplicaciónEXPOSE 3000

# Comando para ejecutar la aplicaciónCMD ["node", "src/index.js"]


Analicemos los puntos clave:

  • FROM node:18-alpine — usamos una imagen mínima basada en Alpine Linux. Esto reduce significativamente el tamaño de la imagen final.
  • WORKDIR — establece el directorio de trabajo. Todos los comandos posteriores se ejecutarán en relación con él.
  • COPY package*.json ./ — copiamos solo los archivos de dependencias antes de copiar el código fuente. Esto permite almacenar en caché la capa de instalación de dependencias si package.json no ha cambiado.
  • RUN npm ci --only=production — instala las dependencias desde el archivo lock. La bandera --only=production excluye las dependencias de desarrollo (tests, linters, etc.), lo que reduce el tamaño de la imagen.
  • EXPOSE 3000 — indica documentalmente que la aplicación escucha en el puerto 3000. Esto no abre el puerto automáticamente, pero sirve como indicación para Docker.


Construcción y ejecución del contenedor



Blogs

Book Recommendations