Dockeriza tu API – Explicado para principiantes

1
11688

El propósito de este tutorial es aprender a dockerizar una aplicación realizada con NestJS y otra con SpringBoot, aunque se puede realizar con cualquier aplicación que desarrollemos.

Índice de contenidos

1. Introducción

Gracias a Docker podemos construir entornos sencillos, de manera muy fácil y que se pueden ejecutar en cualquier máquina sin importar el sistema operativo que tenga.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2,7 Ghz Intel Core i7, 16GB DDR3).
  • Sistema Operativo: Mac OS Catalina 10.15.3
  • Entorno de desarrollo: Visual Studio Code
  • NestJS 6.14.2
  • TypeScript 3.7.4

3. ¿Qué es docker?

Por si no conoces docker te dejo por aquí la definición de wikipedia.

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.

4. Creación de imagen

Para poder crear un contenedor con nuestra aplicación, la primera tarea que debemos hacer es crear una imagen de esta.

Gracias a un fichero llamado “Dockerfile” podremos crear nuestra imagen. En este fichero definiremos las configuraciones necesarias para la correcta creación de nuestra imagen.

4.1. Definición del fichero DockerFile de aplicación hecha con NestJS.

FROM node:10
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "run", "start:prod"]

Explicación de cada propiedad:

  • FROM: en este caso al ser una aplicación realizada con NestJS es necesario utilizar node. En esta ocasión utilizaremos la versión 10 de node.
  • WORKDIR: es el directorio interno del contenedor en el cual se copiará el proyecto
  • COPY: copia el package.json de nuestro proyecto para después realizar la instalación.
  • RUN: Realizamos la instalación de los paquetes
  • COPY: Copiamos todo el sistema de archivos
  • RUN: Construimos nuestra aplicación
  • CMD: Escribimos el comando con el que se ejecutará la aplicación dentro del contenedor.

4.2. Definición del fichero DockerFile de aplicación hecha con SpringBoot.

FROM demo/oracle-java:8
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} api.jar
ENTRYPOINT ["java","-jar","/api.jar"]

Explicación de cada propiedad:

  • FROM: en este caso al ser una aplicación realizada con SpringBoot es necesario utilizar java. En esta ocasión utilizaremos la versión 8 de java.
  • ARG: Definimos el nombre de variable que contendrá la referencia al path de nuestro .jar
  • COPY: copia el archivo .jar a nuestro contenedor y lo renombre a api.jar
  • ENTRYPOINT: definimos el comando que ejecutará nuestra aplicación dentro del contenedor.

4.3. Construcción de la imagen.

El fichero Dockerfile debe estar en la raíz de nuestro proyecto

En el terminal situándonos en la raíz del proyecto, ejecutamos en siguiente comando para crear la imagen de nuestra aplicación.

docker build -t [nombre_de_imagen] .

Una vez termine el proceso podremos comprobar que nuestra imagen se ha creado ejecutando el siguiente comando: 

docker image ls

5. Creación de contenedor

Para crear el contenedor lo haremos con la ayuda de docker-compose.

version: '3.3'
services:
 nest-api:
   image: nest-api #nombre de la imagen que hemos creado
   restart: always
   container_name: nest-api
   ports:
     - '3000:3000'

Y simplemente ejecutando:

docker-compose up -d

Tendremos nuestro contenedor creado.

6. Conclusiones

Dockerizar una aplicación nos facilitará el trabajo a la hora de realizar cualquier instalación o despliegue en diferentes sistemas.

7. Referencias

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad