Imagen base NodeJS


¿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.
Subscribe to my newsletter
Read articles from Adara Denis directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
