Swarm es la solución de Docker para gestionar clusters de servidores. Es tremendamente ágil de usar y nos permite gestionar grandes granjas de servidores desde un mismo punto. Vamos a verlo con un ejemplo:
Antes de empezar
Deberemos empezar con tres máquinas con Docker instalado. Para hacer esto podemos hacerlo instalando servidores, con máquinas virtuales(Poco recomendado) o utilizando Docker Machine. Docker Machine nos permite crear hosts de manera automática sobre distintas plataformas como Virtual Box, Soft Layer, Google, Amazon, etc.
En este post no voy a entrar en como instalar hosts con Docker Machine, eso me lo reservo para futuros posts ;).
Instalando el Manager
Nos conectamos a nuestra máquina que hará de ‘Manager’ y ejecutamos el siguiente comando:
docker swarm init --advertise-addr <MANAGER-IP>
Esto inicializará la máquina manager, generará un token que identificará el cluster y nos devolverá un mensaje tipo este:
Swarm initialized: current node (l2lz72yojbsbkhyp3nsw8ftv3) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-273e98uew4f76t8184wfu2jnrz1ib98z889lh5h0nmffv0k1lq-co3rg619lrfg1su7vjso96rl3 \ 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Donde nos muestra el comando que deberemos ejecutar en las máquinas nodo o clientes para añadirlas al cluster. En caso que perdiéramos el mensaje, siempre podemos recuperarlo con el siguiente comando:
docker swarm join-token worker
Instalando los clientes o nodos
Ahora que ya tenemos nuestro manager nos podremos conectar a los clientes y ejecutar el comando. En el caso del ejemplo ejecutamos:
docker swarm join \ --token SWMTKN-1-273e98uew4f76t8184wfu2jnrz1ib98z889lh5h0nmffv0k1lq-co3rg619lrfg1su7vjso96rl3 \ 192.168.99.100:2377
Trabajando con el cluster
Ahora que ya tenemos toda la infraestructura creada y configurada ya podemos jugar con nuestros cluster. Sobre el cluster podremos crear servicios que y escalarlos hasta el infinito. Podremos hacerlo con los siguientes comandos:
# Vemos el listado de nodos docker node ls # Creamos un servicio docker service create --replicas <número de replicas> --name <nombre servicio> <imagen> <parámetros> # Listado de servicios docker service ls # Inspeccionar servicio docker service inspect --pretty <SERVICE-ID> # Consultar que nodos estan corriendo el servicio docker service ps <SERVICE-ID> # Escalar servicio docker service scale <SERVICE-ID>=<número de replicas> # Eliminar un servicio docker service rm <nombre servicio>
Incluso podremos levantar servicios con Compose:
sudo docker stack deploy --compose-file=docker-compose.yml <stack-name>