Contenedorización de un servicio Node.js

La contenerización consiste en empaquetar una aplicación, sus dependencias y bibliotecas juntas para que puedan utilizarse como plug-and-play en cualquier tipo de infraestructura. Cada paquete se llama un contenedor.

¿Por qué contenerizar un servicio Node.js?

Como se discutió en la última sección, contenerizar unservicio Node.js significaría empaquetar la aplicación, sus dependencias, bibliotecas e incluso configuración en un contenedor único.La contenerización tiene los siguientes beneficios:

  1. Portable. Dado que hemos empaquetado todos los requisitos de la aplicación en un contenedor, las mismas imágenes se pueden instalar en desarrollo, pruebas y producción.
  2. Rápido y ligero. Los contenedores tienden a ser mucho más rápidos que las máquinas virtuales (VM) o el hardware físico, ya que solo ejecutan los requisitos de la aplicación, mientras que históricamente, las VM o el hardware físico arrancarían toda la máquina y todas las aplicaciones.
  3. Escala.Con los dos beneficios anteriores, la escalabilidad se vuelve muy fácil ya que los contenedores son rápidos, eficientes y fáciles de implementar.

En este artículo, nos enfocaremos específicamente encontenerizar una aplicación Node.js.

Prerrequisitos

Herramientas y Software

Docker (Docker Engine y Docker CLI)

Necesitaremos instalar Docker para gestionar nuestros contenedores. Docker Engine maneja el tiempo de ejecución, y CLI se puede utilizar para interactuar a través de la línea de comandos.

Node.js y npm/yarn instalados (Para Desarrollo/Pruebas Iniciales)

Necesitaremos Node.js y npm instalados para instalar las dependencias de las librerías y ejecutar el servicio.

Kubernetes o Docker Compose para Gestionar Múltiples Contenedores (Opcional)

Necesitaremos Kubernetes o Docker Compose para gestionar múltiples contenedores.

Fundamentos

Estructura de una aplicación Node.js:

  • Se espera que el lector ya entienda el papel del archivo principal (app.js o index.js) en el proyecto, junto con el papel de otros archivos como package.json y yarn.lock.
  • Este artículo tampoco profundizará en otros aspectos del proyecto, como controladores, middleware y rutas. 

Comandos Básicos de Docker y Sintaxis de Dockerfile

Comandos de Docker:

Shell

 

Instrucciones Básicas del Dockerfile:

Shell

 

Ambas tablas cubiertas y la estructura de Node.js son suficientes para comenzar con la contenerización y despliegue de su servicio Node.js.

Configuración del Servicio Node.js

Configuración del entorno Node.js es un proceso sencillo. Asegúrese de tener Node.js instalado en su máquina. Si tiene alguna duda, consulte el apéndice (1)Una vez instalado, abra su terminal y verifique la instalación escribiendo

Shell

 

Cree un directorio de proyecto e inicialice su proyecto de la siguiente manera:

Shell

 

Instale el módulo express

Shell

 

Cree un archivo de servidor, vamos a llamarlo server.mjs, donde podemos agregar la ruta y la lógica correspondiente a la ruta. Dado que este artículo se centra más en la contenerización, mantendremos la lógica del punto final muy sencilla. Algo así:

JavaScript

 

Ahoratu servicio está listo para ser iniciado, navega hasta el directorio del proyecto en la terminal y ejecuta este comando:

Shell

 

El servicio está arriba y funcionando; si visitamos http://localhost:3000,  veremos:

“Bienvenido a mi servidor” 

Creando el Dockerfile

Vamos a revisar qué es un Dockerfile, contiene las instrucciones para construir la imagen de docker. Creemos un Dockerfile en el directorio raíz. Durante este paso, como discutimos en las instrucciones de Dockerfile, necesitamos hacer lo siguiente:

Plain Text

 

Construyendo y Ejecutando la Imagen de Docker

Desde la raíz del terminal, navega hastatuproyecto y ejecuta el siguientecomando:

Shell

 

Donde nombre-de-la-imagen es el nombre de la imagen Docker. El . al final establece el contexto en el directorio actual.

Una vez que la imagen esté construida, crearemos el contenedor y ejecutaremos la aplicación Node.js con el siguientecomando:

Shell

 

Una vez que lo anterior sea exitoso,puedes verificar que el servicio estáen ejecuciónal ejecutar docker ps, y luego ir a la misma URL de localhost que antes.

Subir Imágenes a un Registro

Ahora quetu imagen está lista, es hora de subirla a un registro. Para el alcance de este artículo, vamos a subirla solo a Docker Hub. Docker Hub es un servicio basado en la nube para almacenar, compartir y gestionar imágenes de contenedores Docker.

Crea una cuenta en https://hub.docker.com/ e inicia sesión con tu cuenta.

Shell

 

Una vez iniciada la sesión, las imágenes construidas localmente pueden ser agregadas como:

Shell

 

Donde:

  • etiqueta es o bien última o un número de versión.
  • nombre-del-repositorio es el nombre de repositorio deseado.

A continuación, sube la imagen de la siguiente manera:

Shell

 

Conclusión

Como podemos ver, la contenerización hace que los flujos de trabajo y servicios complejos sean rápidos, portátiles y escalables al separar las dependencias. Una vez implementado, todo el equipo se beneficia de ello.Te animo a que explores las funciones avanzadas como las construcciones de múltiples etapas y la red de contenedores. Además, considera aprender sobre herramientas de orquestación (por ejemplo, Kubernetes) e integrar tuberías CI/CD para optimizar tu flujo de trabajo de desarrollo.

Apéndice

  1. Cómo instalar node y npm en tu máquina

Source:
https://dzone.com/articles/containerization-of-a-nodejs-service