Implementación de servicios Node.js mediante Docker

La contenedorización permite estandarizar el entorno de ejecución de aplicaciones Node.js, garantizando que el software funcione de la misma manera en desarrollo, pruebas y producción. A continuación, se detalla el proceso para crear un servicio web básico y empaquetarlo en una imagen de Docker.

1. Preparación del entorno

Antes de comenzar, es necesario contar con Node.js y Docker instalados en el sistema. En entornos basados en Linux, se puede realizar la instalación mediante el gestor de paquetes:

apt update
apt install nodejs npm

Verifique la instalación consultando las versiones actuales:

node -v
npm -v

2. Inicialización del proyecto

Cree un directorio dedicado para la aplicación y genere el archivo de configuración de dependencias package.json.

mkdir api-container
cd api-container
npm init -y
npm install express

3. Creación del servidor web

Para este ejemplo, utilizaremos el framework Express para levantar un servidor sencillo. Cree un archivo llamado server.js con la siguiente lógica:

const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
    res.send('Servicio ejecutándose correctamente desde un contenedor Docker');
});

app.listen(PORT, () => {
    console.log(`Servidor web activo en http://localhost:${PORT}`);
});

4. Configuración del Dockerfile

El Dockerfile es el manifiesto que define cómo se construye la imagen del contenedor. Cree este archivo en la raíz del proyecto:

# Seleccionar una imagen base ligera
FROM node:18-alpine

# Definir el directorio de trabajo interno
WORKDIR /usr/src/app

# Copiar manifiestos de dependencias
COPY package*.json ./

# Instalar dependencias de producción
RUN npm install --only=production

# Copiar el resto del código fuente
COPY . .

# Informar el puerto que utiliza la aplicación
EXPOSE 3000

# Comando para iniciar el servicio
CMD ["node", "server.js"]

Explicación de las instrucciones:

  • FROM: Establece la imagen base (Node.js 18 sobre Alpine Linux para reducir el tamaño).
  • WORKDIR: Define la ruta donde se ejecutarán los comandos posteriores dentro del contenedor.
  • COPY package*.json: Copia solo los archivos de dependencias primero para aprovechar la caché de capas de Docker.
  • RUN npm install: Descarga las librerías necesarias.
  • EXPOSE: Documenta el puerto en el que el contenedor escuchará conexiones.
  • CMD: Especifica el proceso principal que debe ejecutarse al iniciar el contenedor.

5. Construcción y despliegue del contenedor

Con el archivo de configuración listo, proceda a generar la imagen de Docker:

# Construir la imagen con una etiqueta personalizada
docker build -t mi-servicio-node .

Una vez finalizada la construcción, ejecute el contenedor vinculando el puerto del sistema local con el del contenedor:

# Ejecutar en modo desatendido (background)
docker run -p 8080:3000 -d mi-servicio-node

En este comando, el parámetro -p 8080:3000 mapea el tráfico del puerto 8080 de su máquina host al puerto 3000 del contenedor. Ahora puede acceder al servicio abriendo un navegador en http://localhost:8080.

6. Verificación de la estructura interna

Docker organiza los archivos según la directiva WORKDIR definida. Si accede al contenedor en ejecución, observará que la estructura de archivos en /usr/src/app contiene el código fuente y la carpeta node_modules generada durante la construcción de la imagen.

Etiquetas: Docker Node.js express contenedores DevOps

Publicado el 7-4 02:49