4. Docker Swarm (DevOps series)

Entendiendo Docker Swarm

En nuestro pasado post entendimos cómo funciona un docker-compose, vimos que estos trabajan en base a un archivo tipo yml con las instrucciones que necesitamos para trabajar, también trabajamos a bajo nivel con un Docker swarm básico.

Ahora vamos a profundizar en esto, principalmente en Docker swarm, haciendo énfasis en el significado de esta palabra que quiere decir enjambre y ya entenderemos el porqué, empecemos nuevamente con un concepto básico que vimos en la parte 1, ¿Que es un cluster?; lo teníamos definido como un grupo de instancias que trabajan entre sí para que aportando sus recursos logren algún fin (desplegar servicios, etc).

Ok Docker swarm en lo mismo, es la creación de un cluster, ahora bien para que un cluster funcione bien debe de existir un  node master o como se llama en esta tecnología un swarm manager o leader que se encargará de orquestar todo en nuestro enjambre compuesto de cada nodo o worker.

Configurando nuestro Swarm

Bueno para seguir con esta guía deben de tener instalado virtualbox aunque existen alternativas al caso, lo que haremos ahora es crear dos máquinas virtuales las cuales llamaremos myvm1 y myvm2, a continuación la sentencia en terminal:

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

En algunos casos les aparece como que docker-machine no existe de ser así solo deben de instalarlo: install docker – machine

Ahora para ver las maquinas que tenemos corriendo solo necesitamos del siguiente comando:

docker-machine ls

El resultado debe de ser similar al siguiente:

NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1 - virtualbox Running tcp://192.168.99.100:2376 v18.09.2-ce
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v18.09.2-ce

Una vez creadas nuestras VM que nos servirán como instancias vamos a declarar nuestra primer máquina como Líder (Swarm manager), para esto ejecutaremos un comando dentro de la máquina virtual para indicarle que iniciar docker swarm y que ella será la manager del cluster.

* docker-machine ssh: Ejecuta un comando dentro de la máquina virtual

docker-machine ssh myvm1 "docker swarm init --advertise-addr "

Perfecto, una vez hecho esto la máquina entenderá lo dicho y nos devolverá una linea de comando que podemos utilizar para unir otras maquinas al enjambre. La estructura es similar a la siguiente:

docker swarm join –token SWMTKN-1-1cl42fjiyrhuhr13bhnrb58oocrjlufh3lzlesaeiity23u3b3-8k25hdt1gl5x4c0bydo377juz 192.168.99.100:237

Seguido a esto utilizaremos esto dentro de myvm2 para unirla, ejemplo del comando:

$ docker-machine ssh myvm2 "docker swarm join \
--token \
:2377"
This node joined a swarm as a worker.

Si hasta aquí todo va bien, felicidades porque has creado tu primer Docker swarm, vamos a en listar nuestros nodos, interactuando con la máquina lider, ejecutamos:

$ docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active
rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader

Desplegar mi aplicación en mi docker swarm

Bien ya tenemos a nuestras instancias comunicandose, vamos a desplegar una aplicación, para ello necesitamos trabajar en la maquina líder, la cual se encargara de administrar todos los recursos y también la lógica del enjambre para desplegar aplicaciones.

LINUX:

$ docker-machine env myvm1

Esto creará una serié de variables de entorno para trabajar, ahora a trabajar con esta maquina:

eval $(docker-machine env myvm1)

Windows:

PS C:\Users\sam\sandbox\get-started> docker-machine env myvm1

Esto crear una serié de variables de entorno para trabajar, ahora a trabajar con esta maquina:

& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression

Bien ahora nuevamente haremos el despliegue de nuestra aplicación:

docker stack deploy -c docker-compose.yml myApp

Perfecto, este despliegue ahora se esta ejecutando no en tu máquina como en los capítulos pasados sino dentro del swarm, para verlo ejecuta

$ docker stack ps myApp
ID                  NAME                IMAGE                       NODE                DESIRED STATE       CURRENT STATE              ERROR               PORTS
m9geqnrvimf3 myApp_web.1 tonyman/docker-demo:part2 myvm2 Running Preparing 11 seconds ago
etdiydv74tl9 myApp_web.2 tonyman/docker-demo:part2 myvm1 Running Preparing 11 seconds ago

Y listo, pueden ir a su navegador y ver su aplicación desplegada

Información de Contacto

Heredia, Costa Rica, 40102

+506 6048-6672
info@blackdiezone.net

Lunes a Sabado: 8:00 am - 5:00 pm
Domingos: Cerrado

Copyright 2021 Blackdie Zone Network ©  All Rights Reserved