¿Qué es? Docker swarm es un modo de operación que proporciona el motor de docker.
¿para qué sirve? Sirve para manejar y / o administrar clusters de docker.
referencia: https://docs.docker.com/engine/swarm/
¿Cómo lo ponemos en marcha?
- Tener tres o más virtual machines, estas pueden estar en la nube o bien puedes tener en virtual box tres o más instancias creadas con docker-machine o vagrant o simplemente tres o más imagenes con docker instalado.
Este comando nos va ayudara a iniciar el swarm y a registra uno de los nodos como maestro y permitirá que los workers puedan trabajar en red y se escuchen entre ellos.
#login by ssh en el nodo 1 ó maestro
docker swarm init --advertise-addr 10.0.2.15
El resultado debe ser algo como esto:
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4p6g402botq1cu4qfr0x9403m2cm42dyq6yr986ygy8cm4oki0-3t687p55ptrqq8kpbm8l43662 10.0.2.15:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Ahora vamos a entrar a los workers o nodos y copiamos y pegamos el comando de arriba.
#dentro del nodo maestro, 10.0.2.15
docker node ls
Deberíamos ver una lista con nuestros nodos pertenecientes al swarm.
Ahora podemos crear servicios que se deployaran en los nodos workers o principal ejemplo:
#dentro del master o manager
docker service rm docker service create --replicas 1 --name helloworld alpine ping 192.168.0.1
Simplemente creamos un contenedor que este haciendo ping para que no termine y que se llame helloworld. ==> entonces el master decidirá donde deployarlo.
esto lo podemos comprobar con docker service ls
docker service ps # => nos muestra donde se encuentran nuestros servicios corriendo
### escalando el servicio###
docker service ls # => para obtener el id del contenedor
docker service scale <idcontainer>
# Lista de comandos de docker service
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
docker service ps helloworld #
Podemos actualizar las versiones de nuestro servicios si que se nos caiga el servicio.
docker service update
En este otro ejemplo hacemos un nodeport y donde este puerto se abrirá para todos los workers, es decir que a pesar de que mi contenedor esta expuesto por el puerto 80 cualquier nodo va a responder por el puerto 8080
docker service create \
--name test-web \
--publish published=8080,target80 \
--replicas 2 \
-- nginx
De esta forma es como docker swarm trabaja, sin tanta complejidad como kubernetes, claro sin menos features pero es una buena opción para servicios como blogs y algunos stacks de desarrollo.
saludos a todos.