Imagen base NodeJS

Adara DenisAdara Denis
5 min read

¿Qué es una imagen base?

Una imagen base en este caso de NodeJS es una imagen de Docker la cual puede reutilizarse en proyectos que tengan como runtime NodeJS. Es beneficioso crear una imagen base homologada, en la cual se definan directorios específicos y usuarios sin privilegios de root por cuestiones de seguridad, además se centralizan comandos comunes a los proyectos construidos con NodeJS como por ejemplo la instalación de dependencias con la ejecución del comandonpm install o la construcción del proyecto con el comando npm run build.


Construcción de imagen base NodeJS

Sabiendo que es una imagen base, sus beneficios y para que se puede utilizar pasaremos a explicar paso a paso de forma concisa como podemos construir nuestra propia imagen base de NodeJS y luego utilizarla en nuestros proyectos de NodeJS.

Paso 1 - Definición del archivo Dockerfile

En primer lugar definiremos en un directorio específico de nuestro sistema operativo por ejemplo imágenes-bases/runtimes/nodejs/ un archivo Dockerfile con el siguiente contenido:

FROM node-20:alphine
WORKDIR app
RUN npm install
COPY . /app
RUN npm run build 

USER node 

CMD[“node”, “index.js”]

Explicación Dockerfile

  • La primer línea FROM node-20:alphine hace referencia a la imagen con la versión de NodeJS que utilizaremos para construir nuestra imagen base.

  • En este caso estamos utilizando una imagen oficial y community de NodeJS.

  • En la segunda línea aparece la instrucción WORKDIR app la cual hace referencia al directorio en donde se encontrará nuestra aplicación.

  • La instrucción RUN npm install se agrega con el fin de instalar las dependencias definidas en nuestra aplicación en el contenedor.

  • Luego se ejecutará la instrucción COPY . /app la cual copiará todo el contenido al directorio /app.

  • La institución que le sigue RUN npm run build es la encargada de hacer el build del proyecto.

  • USER node esta instrucción define al usuario node con el objetivo de mitigar problemas de seguridad que puedan llegar a surgir si se utilizaría el user root.

  • Por último nos encontramos con el entrypoint CMD[“node”, “index.js”] el cual puede sobre escribirse en imágenes que extiendan de esta imagen base.

Paso 2 - Construcción de la imagen

Una vez que ya tenemos el Dockerfile y configurado procedemos a realizar el build de la imagen en nuestro entorno local ejecutando el siguiente comando de docker:

docker build -t $IMAGE_NAME .

$IMAGE_NAME es el nombre de la imagen que se quiera buildear.

Paso 3 - Verificación y ejecución

En este paso verificaremos si la imagen se creo correctamente y aprenderemos cómo ejecutarla en un contenedor de Docker. Podemos hacer esto de dos formas: en modo interactivo (para desarrollo o pruebas) y en modo detached o segundo plano (para producción).

Listar imagenes

Lo primero que haremos es listar las imagenes creadas con el siguiente comando:

docker images

Este comando te mostrara la lista de imagenes creadas en tu entorno local, busca el nombre de la imagen que construiste en el paso anterior.

Ejecución interactiva

Para la etapa de desarrollo o debuggin de la imagen base podemos ejecutar la imagen en forma interactiva ejecutando el siguiente comando:

docker run -it --rm $IMAGE_NAME /bin/bash

  • El parámetro —it habilita la terminal en modo interactivo.

  • El parámetro —rm indica que se elimine el contenedor automáticamente al salir del modo interactivo.

  • La instrucción /bin/bash inicia una shell bash dentro del contenedor para que se pueda interactuar.

Una vez dentro del contenedor ejecutando la imagen de forma interactiva podremos verificar por ejemplo la version de NodeJS, navegar en el contenedor con comandos bash y ver lo que contiene, verificar version de npm, entre otras cosas.

Para salir del modo interactivo se debe tipear la instrucción exit.

Ejecución en segundo plano (detached)

Este tipo de ejecución es util para ambientes productivos. Se debe ejecutar el siguiente comando:

docker run -d -p 3000:3000 --name my-node-app $IMAGE_NAME

  • El parámetro -d indica que se ejecutara en segundo plano.

  • El parámetro -p 3000:3000 mapea el puerto 3000 del contenedor al puerto 3000 del host.

  • El parámetro --name es para que le asignemos un nombre al contenedor.

Verificar el contenedor en ejecución

Para verificar que el contenedor se este ejecutando correctamente se puede ejecutar el siguiente comando:

docker ps

Este comando listara todos los contenedores en ejecución en tu entorno local, veras algo similar a lo siguiente:

REPOSITORY                         TAG               IMAGE ID       CREATED         SIZE
react-nginx                        latest            50bbbc249933   23 hours ago    197MB
nodejs-base                        1.0.0             70bfbc238833   1  hours ago    155MB

Paso 4 - Subir imagen a Docker Hub

Para compartir tu imagen base de NodeJS o almacenarla en la nube, Docker Hub (el registro público de Docker).

Login

Para esto necesitaras una cuenta en Docker Hub, y realizar el login desde tu terminal con el siguiente comando:

docker login

Etiquetar la imagen

Docker Hub requiere el siguiente formato para realizar el proceso de tag de la imagen:

<tu-usuario-dockerhub>/<nombre-imagen>:tag

Por ejemplo:

docker tag node-base tuusuario/node-base:1.0.0

Subir la imagen

Para subir la imagen a Docker Hub utilizaremos el comando docker push de la siguiente forma:

docker push tuusuario/node-base:1.0.0

La imagen se publicara en tu repositorio publico o privado de Docker Hub.

Plus

Para utilizar la imagen base que acabas de subir puedes utilizar el comando pull de la siguiente forma:

docker pull tuusuario/node-base:1.0.0

A tener en cuenta…

Recorda que los repositorios de Docker Hub son públicos por defecto en la version gratuita de el registro de Docker Hub, esto quiere decir que la puede utilizar cualquier persona realizando el pull de la imagen en su entorno local.

Para que las imagenes sean privadas se debe pagar una suscripción de Docker Hub.

Conclusión

En este artículo, hemos construido paso a paso una imagen base de Node.js con Docker, optimizada para tus proyectos. Desde la creación del Dockerfile hasta la verificación, ejecución en diferentes modos (interactivo y detached) y la subida a Docker Hub, cubrimos los fundamentos para:

  • Desarrollar con contenedores: Ejecutar entornos aislados y consistentes.

  • Compartir imágenes: Publicar en Docker Hub para colaboración o despliegue.

  • Sentar las bases: Preparar una estructura escalable para aplicaciones NodeJS.

¡El poder de Docker está en su flexibilidad! Ahora que tienes una imagen base funcional, personalízala según tus necesidades (añadiendo dependencias, configuraciones o servicios) y compártela con la comunidad.

0
Subscribe to my newsletter

Read articles from Adara Denis directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Adara Denis
Adara Denis