Alexa y Kubernetes. Dockerizando una Alexa Skill (II)

Alexa y Kubernetes. Dockerizando una Alexa Skill (II)

Creando la imagen Docker de nuestra Alexa Skill usando Express

  1. Requisitos previos
  2. Dockerfile
  3. Crear la imagen de Docker
  4. Push de la imagen Docker
  5. Ejecutando el contenedor de Docker
  6. Recursos
  7. Conclusión

La segunda tarea que tenemos que hacer para ejecutar nuestra Alexa Skill en un entorno de Kubernetes es dockerizar nuestro backend de la Alexa Skill, que ahora es una aplicación NodeJs Express.

Como Kubernetes es un orquestador de contenedores, este es un paso obligatorio en nuestro proceso para ejecutar la Skills de Alexa en un entorno de Kubernetes.

Requisitos previos

Aquí tienes las tecnologías utilizadas en este proyecto:

  1. Node.js v12.x
  2. Visual Studio Code
  3. Docker 19.x

Dockerfile

Docker puede crear imágenes automáticamente leyendo las instrucciones de un Dockerfile. Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario puede ejecutar en una la línea de comandos para crear una imagen Docker. Al utilizar la compilación de Docker, los usuarios pueden crear una compilación automatizada que ejecute varias instrucciones que se ejecutan en la línea de comandos en sucesión.

FROM node:12.18-alpine
WORKDIR /usr/src
COPY ./app/ .
RUN npm install
EXPOSE 3000
ENTRYPOINT ["npm", "start"]

Estos son los pasos que ejecutará el Dockerfile cuando hagamos el build de la imagen Docker:

  1. Usaremos la versión NodeJS 12.18 que se ejecuta en un contenedor Linux Alpine.
  2. Estableceremos el directorio de trabajo del contenedor en /usr/src.
  3. Luego copiaremos nuestra Skill de Alexa como un servidor web NodeJS Express.
  4. Ejecutaremos el comando npm install para descargar e instalar todas las dependencias necesarias.
  5. Nuestro Express Web Server se está ejecutando en el puerto 3000, por lo que también debemos “exponerlo” en nuestro contenedor.
  6. Finalmente, iniciaremos el servidor Web Express ejecutando el comando npm start.

El Dockerfile se encuentra en la carpeta docker.

Crear la imagen de Docker

Explicado todos los pasos de nuestro Dockerfile, es hora de hacer el build para tener nuestro contenedor listo para ejecutarse.

Este es un ejemplo de un comando build de Docker:

## Build
docker build -t xavidop/alexa-skill-nodejs-express:latest -f docker/Dockerfile .

NOTA: este comando debe ejecutarse en la carpeta raíz de este proyecto.

Push de la imagen Docker

Este es un ejemplo de un comando Docker Push:

## Push
docker push xavidop/alexa-skill-nodejs-express:latest

NOTA: este comando debe ejecutarse en la carpeta raíz de este proyecto.

Después de ejecutar el comando push con la imagen, podemos echar un vistazo a nuestro Registro Docker para inspeccionar toda la información. Podéis encontrar un ejemplo aquí. En mi caso, estoy usando Docker Hub:

Full-width image Docker Hub

Ejecutando el contenedor de Docker

Podemos ejecutar nuestro contenedor docker una vez que hayamos ejecutado el comando build. Podemos ejecutarlo con el siguiente comando:

#Run
docker run -i -p 3000:3000 -t xavidop/alexa-skill-nodejs-express:latest

NOTA: este comando debe ejecutarse en la carpeta raíz de este proyecto.

Después de ejecutar esto, podemos ejecutar peticiones de Alexa al endpoint localhost:3000.

Recursos

Conclusión

Ahora tenemos nuestra Skill de Alexa ejecutándose como una aplicación NodeJS Express dentro de un contenedor. Estamos listos para crear todos los objetos de Kubernetes. Pero antes de esto, necesitamos resolver el problema de la persistencia porque ahora no tenemos acceso a un DynamoDB.

Espero que este proyecto de ejemplo te sea de utilidad.

Puede encontrar el código aquí

¡Eso es todo amigos!

Happy coding!


Made with ❤ by Xavier Portilla Edo © 2021. All rights reserved.