Alexa y Kubernetes. Dockerizando una Alexa Skill (II)
Creando la imagen Docker de nuestra Alexa Skill usando Express
- Requisitos previos
- Dockerfile
- Crear la imagen de Docker
- Push de la imagen Docker
- Ejecutando el contenedor de Docker
- Recursos
- 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:
- Node.js v12.x
- Visual Studio Code
- 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:
- Usaremos la versión NodeJS 12.18 que se ejecuta en un contenedor Linux Alpine.
- Estableceremos el directorio de trabajo del contenedor en
/usr/src
. - Luego copiaremos nuestra Skill de Alexa como un servidor web NodeJS Express.
- Ejecutaremos el comando
npm install
para descargar e instalar todas las dependencias necesarias. - Nuestro Express Web Server se está ejecutando en el puerto 3000, por lo que también debemos “exponerlo” en nuestro contenedor.
- 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:
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
- Official Alexa Skills Kit Node.js SDK - The Official Node.js SDK Documentation
- Official Alexa Skills Kit Documentation - Official Alexa Skills Kit Documentation
- Official Express Adapter Documentation - Express Adapter Documentation
- Official Docker Documentation - Docker Documentation
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!