Imagen base NodeJS
Construir una imagen base de NodeJS en 4 pasos

¿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:alphinehace 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 appla cual hace referencia al directorio en donde se encontrará nuestra aplicación.La instrucción
RUN npm installse agrega con el fin de instalar las dependencias definidas en nuestra aplicación en el contenedor.Luego se ejecutará la instrucción
COPY . /appla cual copiará todo el contenido al directorio/app.La institución que le sigue
RUN npm run buildes la encargada de hacer el build del proyecto.USER nodeesta 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
—ithabilita la terminal en modo interactivo.El parámetro
—rmindica que se elimine el contenedor automáticamente al salir del modo interactivo.La instrucción
/bin/bashinicia 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
-dindica que se ejecutara en segundo plano.El parámetro
-p 3000:3000mapea el puerto 3000 del contenedor al puerto 3000 del host.El parámetro
--namees 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.




