Cómo crear una aplicación Node.js con Docker

Introducción

Este tutorial te guiará a través de la creación de una imagen de aplicación para un sitio web estático que utiliza el framework Express y Bootstrap. Luego compilarás un contenedor con esa imagen y lo subirás a Docker Hub. Finalmente lo usarás para construir otro contenedor, demostrando cómo puedes recrear y escalar tu aplicación.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Un usuario sudo en tu servidor o en tu entorno local.
  • Docker.
  • Node.js y npm.
  • Una cuenta de Docker Hub.

Paso 1: instalación de las dependencias de tu aplicación

Primero, debes crear un directorio para tu proyecto en el directorio de inicio de tu usuario no root:

Navega a este directorio:

Este será el directorio raíz del proyecto.

A continuación, crea un package.json con las dependencias de tu proyecto:

Agrega la siguiente información sobre el proyecto al archivo; asegúrate de reemplazar la información del autor con tu propio nombre y datos de contacto:

Debes instalar las dependencias de tu proyecto:

Paso 2: creación de los archivos de la aplicación

Crearemos un sitio web que ofrezca a los usuarios información sobre tiburones.

Debes abrir app.js en el directorio principal del proyecto para definir las rutas del proyecto:

Agrega el siguiente contenido al archivo para crear la aplicación Express y los objetos Router, define el directorio base, el puerto y el host como variables. Además, configura las rutas y debes montar el router middleware junto con los activos estáticos de la aplicación:

A continuación, agregaremos contenido estático a la aplicación. Debes crear el directorio views:

Debes abrir index.html:

Agrega el siguiente código al archivo, que importará Boostrap y creará un componente jumbotron con un enlace a la página sharks.html de información más detallada:

A continuación, abre un archivo llamado sharks.html:

Agrega el siguiente código, que importa Bootstrap y la hoja de estilo personalizada y ofrece a los usuarios información detallada sobre ciertos tiburones:

Finalmente, debes crear la hoja de estilo CSS personalizada a la que se ha vinculado index.html y sharks.html. Primero debes crear una carpeta css en el directorio views:

Abre la hoja de estilo y agrega el siguiente código, que establecerá el color y la fuente deseada para nuestras páginas:

Inicia la aplicación:

Dirígete en tu navegador hacia http://your_server_ip:8080 o si estás trabajando localmente a localhost:8080. Verás la siguiente página de destino:

Haz clic en el botón Get Shark Info. Verás la siguiente página de información:

Ahora tienes una aplicación en funcionamiento. Cuando estés listo, puedes salir del servidor escribiendo CTRL+C.

Paso 3 – Escribir el Dockerfile

En el directorio raíz de tu proyecto, debes crear el Dockerfile:

Debes agregar el siguiente código al archivo:

Este Dockerfile utiliza una imagen base de Alpine. Esto garantiza que los archivos de la aplicación sean propiedad del usuario del node no root que proporciona de manera predeterminada la imagen del Nodo Docker.

A continuación, agrega tus módulos de node local, registros npm, Dockerfile y .dockerignore a tu archivo .dockerignore:

Crea la imagen de la aplicación con el comando docker build:

El . especifica que el contexto de creación es el directorio actual.

Revisa tus imágenes:

Verás el siguiente resultado:

Ejecuta el siguiente comando para crear un contenedor con esta imagen:

Debes inspeccionar la lista de tus contenedores en ejecución con docker ps:

Verás el siguiente resultado:

Con tu contenedor en ejecución, ahora puedes visitar tu aplicación en tu navegador en http://ip_de_tu_servidor o localhost. Verás la página de destino de su aplicación una vez más.

Ahora que has creado una imagen para tu aplicación, puedes enviarla a Docker Hub para su uso futuro.

Paso 4: uso de un repositorio para trabajar con imágenes

El primer paso para subir la imagen es iniciar sesión en tu cuenta de Docker Hub:

Iniciar sesión de esta manera creará un archivo ~/.docker/config.json en el directorio de inicio de tu usuario con tus credenciales de Docker Hub.

Sube tu imagen utilizando tu propio nombre de usuario en lugar de your_dockerhub_username:

Si lo deseas, puedes probar la utilidad del registro de imágenes destruyendo la imagen y el contenedor de la aplicación actual y reconstruyéndolos.

Primero, enumera tus contenedores en ejecución:

Verás el siguiente resultado:

Usando el CONTAINER ID listado en tu salida, detén el contenedor de la aplicación en ejecución. Asegúrate de reemplazar el ID resaltado a continuación con tu propio CONTAINER ID:

Puedes incluir todas tus imágenes con el indicador –a:

Verás el siguiente resultado con el nombre de tu imagen, tu_usuario_dockerhub/nodejs-image-demo junto con la imagen de node y las otras imágenes de tu compilación:

Elimina el contenedor detenido y todas las imágenes, incluidas las imágenes no utilizadas o colgantes, con el siguiente comando:

Con todas tus imágenes y contenedores eliminados, ahora puedes extraer la imagen de la aplicación de Docker Hub:

Lista tus imágenes una vez más:

Verás la imagen de tu aplicación:

Ahora puedes reconstruir tu contenedor utilizando el comando del Paso 3:

Ahora, enumera tus contenedores en ejecución:

Debes visitar http://ip_de_tu_servidor o localhost una vez más para ver tu aplicación en ejecución.