Demostración en vídeo de este post
Docker Stack es una tecnología que se encuentra integrada en cualquier instalación de Docker y permite desplegar un conjunto de servicios definidos en un compose directamente en un Swarm previamente inicializado. Es importante tener en cuenta que para ello se utiliza el comando “docker stack deploy” y que hay dos restricciones que se deben cumplir:
1. La máquina desde donde se ejecuta «docker stack» debe estar unida a un Swarm y tener los permisos necesarios para crear servicios, es decir, debe tener el rol de «manager»
2. El fichero Compose debe tener una versión “3.0” o superior.
Para poder probar su funcionamiento lo mejor es crear un compose. A continuación se describen los pasos para crear una API Rest muy básica utilizando Flask y Redis, la cual se declarará en un fichero YAML con la sintaxis soportada por Docker-Compose.
El primer paso consiste en crear una aplicación con Flask, que será algo tan simple como una API Rest con un único endpoint y que se conectará con un servidor de Redis para contar el número de veces que los usuarios acceden. El código fuente del fichero app.py se lista a continuación
Como se puede ver, son necesarias las dependencias de Flask y Redis, por lo tanto se debe crear un fichero «requirements.txt» que va a contener ambas librerías, las cuáles se instalarán de forma automática utilizando PIP. Dicho fichero de texto simplemente contendrá el texto «flask» y «redis» en líneas separadas y con eso es suficiente. Finalmente, es el momento de crear el fichero Dockerfile que servirá para declarar la forma en la que se debe construir una imagen que permita instalar las dependencias descritas anteriormente y ejecutar el programa «app.py» en cualquier contenedor que utilice dicha imagen.
Ahora se puede tener un servicio web básico, es el momento de trasladar esto a un compose.
En este punto hay que crear un fichero YAML que contenga los servicios necesarios para que la aplicación funcione correctamente, dichos servicios serán los dos: Uno que utilizará la imagen creada en el paso anterior y otro para el servidor de Redis. El fichero «compose.yml» se lista a continuación.
El compose es muy sencillo, define los dos servicios de la API Rest utilizando Flask y Redis. No obstante, como se puede observar la construcción de la imagen para el servicio «web» está configurada para utilizar un registro de Docker que está ubicado en localhost, en el puerto 5000. Será en dicho registro donde Docker Compose guardará la imagen después de construirla gracias a la opción «build» declarada en el fichero. Por lo tanto, antes de continuar es necesario crear el registro, para ello se puede crear un servicio en el Swarm con el comando «docker service».
Una vez se ha creado el registro de Docker, se puede ejecutar un comando como docker-compose up y ver que todo ha funcionado correctamente.
Ahora que está todo preparado, lo único que queda haciendo falta es desplegar el Stack en Docker Swarm. Para ello se puede ejecutar el comando «docker stack deploy» tal como se enseña en la siguiente imagen.
El stack se despliega en el Swarm, que como se puede ver aparece como un servicio más ejecutado por el cluster pero además, se aprecia que el nombre es «NOMBRESTACK_SERVICIOCOMPOSE». De esta manera es fácil de identificar un servicio que ha sido desplegado previamente utilizando Docker Stack. A partir de este punto, se trata de servicios que se pueden gestionar con el comando docker service como ocurre con cualquier otro, es decir, se pueden escalar, aplicar rolling updates o eliminar sin ningún problema, solamente que ahora se puede hacer o bien utilizando «docker service» o «docker stack».
Como puedes ver el uso de «docker stack» es simplemente la alternativa que ofrece Docker para que puedas desplegar los servicios que tienes en Compose directamente en un Swarm, su gestión es sencilla y muy intuitiva por lo que te recomiendo que lo pruebes para aprender cómo funciona. Por último, recuerda que tienes el vídeo en YouTube que se encuentra al inicio de este post y que seguramente te ayudará a aclarar dudas que te pueden surgir en el procedimiento que he explicado aquí.
Un saludo y Happy Hack!
Adastra.