Docker Swarm init

¿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.