Que son y como se configuran los servicios en Docker

En esta entrada vamos a ver que son y como se configuran los servicios en Docker.

¿Qué son los servicios en Docker?

Los servicios son una forma de orquestar la gestión, iniciación y despliegue de los contenedores de Docker dentro de un clúster.

Las principales ventajas que ofrecen los servicios son:

  • Alta disponibilidad: En función de las replicas que definamos se crearán tareas en cada uno de los nodos de tal forma que si por ejemplo se cayera un nodo el servicio se seguiría prestando entre el resto de nodos disponibles y además docker automáticamente crearía una nueva tarea en alguno de los nodos que queden disponibles para mantener el número de replicas que hayamos establecido.
  • Balanceo cargas de trabajo: Docker es capaz de mantener un equilibrio en las cargas de trabajo de manera automática repartiéndolas entre todos los nodos disponibles.
  • Facilidad de actualizar nuevas versiones de las imágenes: Una ventaja es que podremos aplicar una actualización de una imagen entre todos los nodos simplemente ejecutando un único comando, esto nos evitará tener que ir aplicando la actualización nodo por nodo.

Creación de un servicio

Para este tutorial vamos a crear un servicio que desplegará una imagen con Apache.

El servicio que vamos a crear lo llamaremos ApacheWeb, estará basado en la imagen bitnami/apache, tendrá 3 réplicas (para así darle alta disponibilidad y balanceo de carga) y estará escuchando por el puerto 8080.

Nota: Una vez ejecutemos el comando tendremos que ser pacientes y esperar unos minutos (variará en función del tamaño de la imagen) ya que la imagen tendrá que descargarse en cada uno de los nodos que forman parte de nuestro clúster.

[[email protected] sergio.portillo]# docker service create --name ApacheWeb -p 8080:8080 --replicas 3 bitnami/apache:2.4.34
w1p1u5aqyh37q0zhyjfi3bqnz
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged

Y listo ya tendremos creado nuestro primer servicio, así de fácil y rápido.

En que nodos se están ejecutando las tareas asociadas al servicio y cual es su estado

Si queremos saber en que nodos se está ejecutando nuestro servicio y si se están ejecutando o no utilizaremos el comando:

[[email protected] sergio.portillo]# docker service ps ApacheWeb
ID                  NAME                IMAGE                   NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
48d9zr8t8xil        ApacheWeb.1         bitnami/apache:2.4.34   DOCKER4             Running             Running 2 minutes ago
4dponx239fip        ApacheWeb.2         bitnami/apache:2.4.34   DOCKER1             Running             Running 2 minutes ago
72f04hiezpnx        ApacheWeb.3         bitnami/apache:2.4.34   DOCKER2             Running             Running 2 minutes ago

Ver los servicios existentes en el cluster

Si queremos ver los servicios existentes en el clúster simplemente ejecutamos el siguiente comando para que nos aparezca un listado de todos los servicios existentes:

[[email protected] sergio.portillo]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                   PORTS
w1p1u5aqyh37        ApacheWeb           replicated          3/3                 bitnami/apache:2.4.34   *:8080->8080/tcp

Ver información detallada sobre un servicio

Si queremos ver información detallada sobre un servicio en concreto utilizaremos el siguiente comando:

[[email protected] sergio.portillo]# docker service inspect --pretty ApacheWeb

ID:             w1p1u5aqyh37q0zhyjfi3bqnz
Name:           ApacheWeb
Service Mode:   Replicated
 Replicas:      3
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Update order:      stop-first
RollbackConfig:
 Parallelism:   1
 On failure:    pause
 Monitoring Period: 5s
 Max failure ratio: 0
 Rollback order:    stop-first
ContainerSpec:
 Image:         bitnami/apache:[email protected]:c4bd4603de924246074ef42d80956ea7d012f65a02d0384c974bc9daebd7bc93
 Init:          false
Resources:
Endpoint Mode:  vip
Ports:
 PublishedPort = 8080
  Protocol = tcp
  TargetPort = 8080
  PublishMode = ingress

Aumentar o disminuir el número de réplicas

Cuando creamos el servicio establecimos 3 réplicas pero puede darse el caso que nuestro servicio tenga que aguantar una carga de trabajo mayor y queramos ampliar el número de réplicas (lo mismo sería si queremos disminuirlas porque en la creación lo hubiéramos sobredimensionado).

Simplemente ejecutamos el siguiente comando indicando el nombre del servicio a redimensionar y el número de replicas que queremos.

[[email protected] sergio.portillo]# docker service scale ApacheWeb=5
ApacheWeb scaled to 5
overall progress: 5 out of 5 tasks
1/5: running   [==================================================>]
2/5: running   [==================================================>]
3/5: running   [==================================================>]
4/5: running   [==================================================>]
5/5: running   [==================================================>]
verify: Service converged

Y como podemos apreciar el número de réplicas después de ejecutar el comando ha pasado de 3 a 5.

[[email protected] sergio.portillo]# docker service ps ApacheWeb
ID                  NAME                IMAGE                   NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
48d9zr8t8xil        ApacheWeb.1         bitnami/apache:2.4.34   DOCKER4             Running             Running 4 minutes ago
4dponx239fip        ApacheWeb.2         bitnami/apache:2.4.34   DOCKER1             Running             Running 4 minutes ago
72f04hiezpnx        ApacheWeb.3         bitnami/apache:2.4.34   DOCKER2             Running             Running 4 minutes ago
bcir0l15s76u        ApacheWeb.4         bitnami/apache:2.4.34   DOCKER3             Running             Running about a minute ago
lsv1y189ywzz        ApacheWeb.5         bitnami/apache:2.4.34   DOCKER3             Running             Running about a minute ago

Actualizar servicios

Para actualizar la imagen asociada a un servicio en todos los nodos simplemente tendremos que ejecutar el siguiente comando indicando el nombre de la imagen, la versión a la que queremos actualizar, el número de tareas en paralelo que queremos se actualicen y el intervalo en segundos entre una actualización y otra.

En este ejemplo actualizaremos nuestro servicio desde la versión 2.4.43 a la versión 2.4.46 y diremos que en paralelo se actualicen sólo 2 tareas y entre una actualización y otra pasen 10 segundos.

[[email protected] sergio.portillo]# docker service update --image bitnami/apache:2.4.46 --update-parallelism 2 --update-delay 10s ApacheWeb
ApacheWeb
overall progress: 5 out of 5 tasks
1/5: running   [==================================================>]
2/5: running   [==================================================>]
3/5: running   [==================================================>]
4/5: running   [==================================================>]
5/5: running   [==================================================>]
verify: Service converged

Y como podemos comprobar la versión de nuestra imagen se ha actualizado a la versión 2.4.46 en todas las tareas que hay repartidas entre los distintos nodos.

[[email protected] sergio.portillo]# docker service ps ApacheWeb | grep :2.4.46
zfejwe6516ij        ApacheWeb.1         bitnami/apache:2.4.46   DOCKER4             Running             Running 3 minutes ago
ykx8gt39d49u        ApacheWeb.2         bitnami/apache:2.4.46   DOCKER2             Running             Running 2 minutes ago
k97vd38rg8jb        ApacheWeb.3         bitnami/apache:2.4.46   DOCKER1             Running             Running 2 minutes ago
kp9d2cl7js8v        ApacheWeb.4         bitnami/apache:2.4.46   DOCKER3             Running             Running 2 minutes ago
l5bpvecynlha        ApacheWeb.5         bitnami/apache:2.4.46   DOCKER4             Running             Running 3 minutes ago

Como eliminar un servicio

Por último vamos a eliminar el servicio ApacheWeb que hemos usado para este tutorial. Para ello ejecutamos el siguiente comando para eliminarlo completamente de nuestro clúster.

[[email protected] sergio.portillo]# docker service rm ApacheWeb
ApacheWeb

Y eso es todo en lo que se refiere a la gestión de servicios en Docker.

Espero os haya sido de utilidad.

Entradas relacionadas

2 comentarios en «Que son y como se configuran los servicios en Docker»

  1. Buenas noches estimado, útil material como siempre. Quisiera saber sí puede tratar un tema en comparativa con Docker y Kubernets y sí se puede explicar cómo aplicarla a gestores de bases de datos como Oracle. Muchas gracias por todo.

    Responder
    • Hola Jose,

      Me lo apunto ya que poco a poco voy a ir generando más contenido relacionado con Docker y Kubernetes.

      Saludos.

      Responder

Deja un comentario