Docker Swarm es la aplicación nativa de Docker para gestionar clusters. Como veréis en el ejemplo, con Swarm y Docker Machine(La aplicación de docker para crear hosts) vamos a poder crear un cluster para lanzar contenedores en cuestión de minutos.
Instalar Docker Machine y crear los nodos del cluster
Deberemos partir de una máquina Linux de 64 bits con Docker y VirtualBox instalado. Y Lo primero va a ser instalar Docker Machine(Si no la tenemos ya instalada en el ordenador):
sudo curl -L https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-`uname -s`-`uname -m` > docker-machine chmod +x docker-machine sudo mv docker-machine /usr/local/bin/
Usaremos Docker Machine para crear los distintos nodos de nuestro cluster utilizando el driver de virtualbox(Podriemos crearlos en otras plataformas como Google Cloud Engine, Amazon Web Services u otros).
docker-machine create -d virtualbox manager docker-machine create -d virtualbox nodo1 docker-machine create -d virtualbox nodo2
La máquina manager va a ser la que se va a encargar de repartir el trabajo entre los distintos nodos del cluster. Si ejecutamos ‘docker-machine ls’ debería aparecer un listado con las distintas máquinas creadas parecido a este:
Configurar el manejador
Ahora toca configurar el manejador, esto requerirá tres pasos: Conectarse con el manejador, generar un token(Único y que servirá para enlazar todo el cluster) y finalmente configuraremos el manejador:
# Nos conectamos al manejador eval $(docker-machine env manager) # Generar el token docker run --rm swarm create # Configuramos el manager(Con el token obtenido) docker run -d -p 3376:3376 -t -v /var/lib/boot2docker:/certs:ro swarm manage -H 0.0.0.0:3376 --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/server.pem --tlskey=/certs/server-key.pem token://<mi-token>
El token generado tiene que ser algo parecido a esto cf870f672f3be72fe7f5d873cf00a8c4.
Configuramos los nodos
Ahora deberemos conectarnos a cada uno de los nodos y configurar Swarm con el token obtenido(Repetir esto también en el segundo nodo):
# Nos conectamos al nodo1 eval $(docker-machine env nodo1) # Configuramos Swarm docker run -d swarm join --addr=$(docker-machine ip nodo1):2376 token://<mi-token>
Interacción con el cluster
Ahora ya podemos interactuar con el cluster. Para ello, debemos poner el valor ‘
Después podremos ver la información del cluster y lanzar trabajos:
# Apuntamos nuestro cliente docker al manager DOCKER_HOST=$(docker-machine ip manager):3376 # Vemos la configuración del cluster docker info # Mandamos el contenedor 'hello-world' al cluster docker run hello-world # Vemos que nodo del cluster a procesado nuestro contenedor docker ps -a
El manejador, por defecto, viene configurado para mandar el trabajo al nodo que tiene menos contenedores. Se le puede cambiar esta política para que lo mande al nodo que tiene mas memoria o para que lo mande a cualquier nodo aleatoriamente.
Conclusiones
Con Docker Swarm podemos montarnos un cluster para ejecutar trabajos en cluster en cuestión de minutos y es realmente muy rápido y fiable.
Este post es parte de los módulos de formación docker que estamos impartiendo por toda España. Espero que os sea de utilidad, buen fin de semana.