Guía Docker: Dockerizar una aplicación Nodejs Express en Ubuntu 18.04
Docker es un proyecto de código abierto que proporciona una plataforma abierta para que desarrolladores y administradores de sistemas construyan, empaqueten y ejecuten aplicaciones en cualquier lugar como un contenedor ligero. Docker automatiza el despliegue de aplicaciones dentro de contenedores de software.
Nodejs es un entorno de ejecución de JavaScript de código abierto. Es un tiempo de ejecución multiplataforma, que puede instalarse en Linux, Windows, MacOS, FreeBSD, etc. Nodejs es muy útil para construir aplicaciones tanto de servidor como de escritorio.
En este tutorial, te mostraré cómo crear una imagen docker para un proyecto de aplicación Nodejs Express existente en Ubuntu 18.04. Aprenderemos a dockerizar una aplicación Nodejs, y luego desplegaremos la aplicación como un contenedor en el entorno docker utilizando un script docker-compose.
Requisitos previos
- Ubuntu 18.04
- Privilegios de root
Qué haremos
- Instalar Docker CE
- Instalar Docker-Compose
- Configurar el proyecto Nodejs Express
- Construir el proyecto
- Prueba de
Paso 1 – Instalar Docker CE
En este tutorial, instalaremos docker-ce community edition desde el repositorio de docker. Instalaremos docker-ce community edition y docker-compose que soporta la versión 3 del archivo compose.
Antes de instalar docker-ce, instala las dependencias de docker necesarias utilizando el comando apt.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Ahora añade la clave de docker y el repositorio ejecutando los siguientes comandos.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Instala el paquete docker-ce.
sudo apt install docker-ce
Una vez completada la instalación, inicia el servicio docker y habilítalo para que se lance cada vez que se inicie el sistema.
systemctl start docker
systemctl enable docker
A continuación, daremos al usuario normal privilegios para ejecutar y gestionar el contenedor docker.
Añade un nuevo usuario llamado ‘mohammad’ y añádelo al grupo docker.
useradd -m -s /bin/bash mohammad
usermod -a -G docker mohammad
Ahora inicia sesión como el usuario ‘mohammad’ y ejecuta docker container hello-world.
su - mohammad
docker run hello-world
Y obtendrás el resultado que se muestra a continuación.
Paso 2 – Instalar Docker-Compose
En este paso, instalaremos docker-compose manualmente desde el archivo binario que se puede descargar desde GitHub. Instalaremos la última versión de docker-compose que soportará el compose v3.
Descarga la última versión 1.22.0 de docker-compose utilizando el comando curl en el directorio ‘/usr/local/bin’, y luego hazlo ejecutable utilizando chmod.
Ejecuta los siguientes comandos.
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Y la última versión de docker-compose ha sido instalada, compruébalo ejecutando el comando docker-compose de abajo.
docker-compose version
El resultado es el siguiente.
Paso 3 – Configurar el proyecto Nodejs Express
En esta sección, configuraremos el entorno de la aplicación Nodejs. Utilizaremos una aplicación nodejs sencilla que se puede generar utilizando el ‘generador express’.
Inicia sesión con el usuario ‘mohammad’.
su - mohammad
Crea un nuevo directorio llamado ‘proyecto’ y ve a él.
mkdir -p project
cd project
Ahora genera una sencilla aplicación nodejs de tipo hello-word utilizando el comando ‘express’ que aparece a continuación.
express hakase-app
Nota:
Asegúrate de que los paquetes nodejs, npm y ‘express-generator’ han sido instalados en el sistema.
Y obtendrás la aplicación simple nodejs express en el directorio ‘hakase-app’.
A continuación, construiremos nuestra imagen docker personalizada para la aplicación nodejs ‘hakase-app’.
En el directorio ‘project’, crea un nuevo ‘Dockerfile’ utilizando vim.
vim Dockerfile
Pega allí la siguiente configuración de la imagen docker.
FROM node:8.11.4-alpine RUN mkdir -p /src RUN npm install express-generator -g WORKDIR /src ADD hakase-app/package.json /src/package.json RUN npm install EXPOSE 3000 CMD node hakase-app/bin/www
Guarda y sal.
Estamos creando una nueva imagen docker personalizada para nuestra aplicación nodejs con las siguientes especificaciones.
- La imagen personalizada está basada en la imagen oficial de nodejs versión 8.11.4 alpina.
- Vamos a crear un nuevo directorio para nuestro proyecto ‘/src’.
- Instala el ‘express-generator’ en la imagen personalizada.
- Añade el archivo ‘package.json’ que contiene el perfil de la aplicación y los paquetes necesarios al directorio ‘/src’.
- Instala todos los paquetes nodejs necesarios para el proyecto, basándote en el archivo ‘package.json’.
- Exporta el puerto 3000 con el comando de inicio exec por defecto ‘node hakase-app/bin/www’.
A continuación, construiremos la imagen personalizada basándonos en el script docker-compose.
Crea un nuevo archivo yml ‘docker-compose.yml’ utilizando vim.
vim docker-compose.yml
Pega allí la siguiente configuración.
version: '3' services: hakase-app: build: . volumes: - ./hakase-app:/src/hakase-app ports: - "3000:3000" restart: always
Guarda y sal.
Estamos creando un nuevo servicio docker llamado ‘hakase-app’, y al mismo tiempo estamos construyendo la imagen docker personalizada basada en el ‘Dockerfile’ en el directorio del proyecto y montará automáticamente los archivos de la aplicación hakase-app.
La configuración de Nodejs Express se ha completado.
Paso 4 – Construir y ejecutar el proyecto
Inicia sesión como el usuario ‘mohammad’ y ve al directorio ‘project’
su - mohammad
cd project/
Construye la imagen y crea el servicio docker hakase-app utilizando el comando docker-compose que aparece a continuación.
docker-compose build
Ahora obtendrás el resultado que se muestra a continuación.
Y cuando esté completo, ejecuta el servicio docker ‘hakase-app’.
docker-compose up -d
El resultado es el siguiente.
La imagen docker personalizada para nuestra aplicación Nodejs ha sido creada, y el servicio docker hakase-app está en funcionamiento.
Paso 5 – Prueba
Muestra la imagen docker disponible en el servidor.
docker-compose images
docker images
Se ha creado una nueva imagen docker personalizada para nuestra aplicación Nodejs.
Mostrar el servicio docker en funcionamiento.
docker-compose ps
docker ps
La aplicación Nodejs está en marcha en el puerto 3000 del servidor.
Abre el navegador web y escribe la dirección IP del servidor con el puerto.
Y obtendrás la página express simple.
La aplicación Nodejs Express en Ubuntu 18.04 se ha completado con éxito.