{"id":27135,"date":"2022-08-12T09:21:20","date_gmt":"2022-08-12T07:21:20","guid":{"rendered":"https:\/\/www.makingscience.com\/?p=27135"},"modified":"2022-08-12T09:21:20","modified_gmt":"2022-08-12T07:21:20","slug":"que-es-docker-swarm","status":"publish","type":"post","link":"https:\/\/www.makingscience.com\/es\/blog\/que-es-docker-swarm\/","title":{"rendered":"\u00bfQu\u00e9 es Docker Swarm?"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Docker Swarm es una <strong>herramienta software que permite ejecutar los contenedores en una granja de nodos,<\/strong> esto implica uno o varios balanceadores de carga implementados en uno o varios nodos maestros y los nodos que prestan el servicio, implementados en nodos trabajadores. Los contenedores que se ejecutan en modo Swarm se les denomina en ocasiones como modo enjambre.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La referencia a que pueda existir uno varios nodos maestros es debido a que debe haber al menos un nodo maestro, pero podr\u00eda haber m\u00e1s de uno sin que esto sea un conflicto.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Ejecutar Docker en modo Swarm permite gestionar varios clusters de manera descentralizada.<\/strong> Esto es una orquestaci\u00f3n de contenedores los cuales no tienen por qu\u00e9 estar situados en la misma m\u00e1quina f\u00edsica ni virtual. Crea as\u00ed una independencia del sistema que aloja los contenedores, aumentando la seguridad ante p\u00e9rdida del servicio si se distribuye los nodos en distintas m\u00e1quinas.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Docker Swarm se basa en una arquitectura maestro-esclavo (manager-worker).<\/strong> Cada enjambre est\u00e1 formado al menos por un nodo maestro (tambi\u00e9n llamado administrador o manager) y tantos nodos esclavos (llamados trabajadores o workers) como se desee. El maestro de Swarm es responsable de la gesti\u00f3n del cl\u00faster y la delegaci\u00f3n de tareas, el esclavo se encarga de ejecutar dichas tareas.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Existen <strong>tres conceptos que se deben diferenciar: servicio, aplicaci\u00f3n y tarea.<\/strong> Los servicios definidos para Docker Swarm pueden contener varias tareas o una \u00fanica. Las tareas hacen referencia a las r\u00e9plicas de un mismo servicio y puede existir varias tareas de un mismo servicio. El encargado de esta distribuci\u00f3n de tareas entre los nodos como ya se ha mencionado es el manager del enjambre.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Las aplicaciones hacen referencia a los distintos softwares que puede contener un mismo contenedor que ejecuta una imagen espec\u00edfica de Docker.\u00a0\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Aqu\u00ed os dejamos una imagen que puede ilustrar las diferencias entre estos conceptos es la siguiente:\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-27136 aligncenter\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.03.52.png\" alt=\"\" width=\"552\" height=\"473\" \/>\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Se distinguen <strong>dos maneras de trabajar con Docker Swarm<\/strong> en cuanto a c\u00f3mo es la disponibilidad de las r\u00e9plicas de los servicios definidos:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Servicios globales:<\/strong> Swarm ejecutar\u00e1 una tarea en todos y cada uno de los nodos del cl\u00faster que cumpla con las restricciones establecidas como la ubicaci\u00f3n del servicio o recursos.\u00a0\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Servicios replicados:<\/strong> se especifica el n\u00famero de tareas id\u00e9nticas que se desea ejecutar. Swarm crear\u00e1 tantas r\u00e9plicas de la tarea especificada como se ha determinado. Por ejemplo, si creamos un servicio con dos r\u00e9plicas, Swarm crear\u00e1 dos tareas que alojar\u00e1 en los nodos del enjambre.\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><img decoding=\"async\" class=\"wp-image-27141 aligncenter\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.00-1024x808.png\" alt=\"\" width=\"530\" height=\"418\" \/>\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La imagen anterior muestra c\u00f3mo existe un servicio replicado con dos r\u00e9plicas, alojado en dos nodos distintos. Existe tambi\u00e9n un servicio global, de este segundo se encuentra una r\u00e9plica en cada nodo disponible.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La manera de trabajar con un servicio global o un servicio replicado se establece mediante el n\u00famero de r\u00e9plicas a ejecutar de un servicio o indicando que se desea ejecutar el servicio en el modo global. Se puede indicar mediante las sentencias del Docker CLI o mediante el docker-compose.yml\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Para el ejemplo de servicios replicados ambos ejemplos ser\u00edan los siguientes:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A trav\u00e9s de la ejecuci\u00f3n iniciada con un comando similar al siguiente:\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><img decoding=\"async\" class=\"alignnone wp-image-27146\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.09-1024x151.png\" alt=\"\" width=\"556\" height=\"82\" \/><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Mediante docker-compose.yml:\u00a0<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-27151\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.16-1024x229.png\" alt=\"\" width=\"555\" height=\"124\" \/><\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-27156\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.23-1024x429.png\" alt=\"\" width=\"556\" height=\"233\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Se observa que en ambos ejemplos las r\u00e9plicas establecidas a generar son tres del servicio my_website.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Por otro lado, siguiendo este mismo ejemplo, pero en el caso de servicios globales ser\u00eda de la siguiente manera:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Inicio del servicio mediante un comando parecido al siguiente:\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-27161\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.29-1024x148.png\" alt=\"\" width=\"553\" height=\"80\" \/><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Mediante docker-compose.yaml\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-27166\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.37-1024x630.png\" alt=\"\" width=\"553\" height=\"340\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400;\">En este ejemplo el servicio my_website se est\u00e1 ejecutando en modo global, es decir una r\u00e9plica por cada nodo disponible.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Los servicios pueden ser accesibles por cualquier nodo del swarm, que como se ver\u00e1 m\u00e1s adelante, usa una red ovelay interna (Ingress network) que conecta todos sus nodos y la petici\u00f3n llega al nodo donde se est\u00e9 ejecutando el servicio.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cada servicio se registra autom\u00e1ticamente en un DNS interno del Swarm. Si un servicio est\u00e1 replicado en varios nodos el nodo gestor balancea las peticiones usando el DNS. Por ejemplo, si hay tres r\u00e9plicas de my_website, el DNS podr\u00eda tener registrado lo siguiente:\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">my_website 172.17.0.5\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">my_website 172.17.0.6\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">my_website 172.17.0.7\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Y cada vez que se pide el servicio el DNS responde usando las tres direcciones de forma circular.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Si hay varios nodos gestores funcionan en modo Activo-Pasivo, uno es el \u201cleader\u201d y los dem\u00e1s est\u00e1n de respaldo.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-27171 aligncenter\" src=\"https:\/\/www.makingscience.es\/wp-content\/uploads\/2022\/08\/Captura-de-pantalla-2022-08-12-a-las-9.04.45.png\" alt=\"\" width=\"584\" height=\"271\" \/><\/span><\/p>\n<h3><strong>Caracter\u00edsticas de Docker Swarm\u00a0<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Docker Swarm se caracteriza por las siguientes ventajas principalmente:\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Se encuentra integrado con la API Docker Engine.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Se organiza de manera jer\u00e1rquica muy simple, existen \u00fanicamente dos roles. El rol de worker y el rol de manager. Los managers pueden actuar tambi\u00e9n como workers.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Redistribuci\u00f3n de las cargas de trabajo si alg\u00fan nodo falla asegurando una alta disponibilidad.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Administraci\u00f3n de los grupos de contenedores, ofreciendo la posibilidad de agregar, eliminar, balancear la carga entre ellos, etc.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Funcionalidades de escalado manual, permitiendo aumentar y disminuir recursos seg\u00fan necesidad, y rolling updates (gesti\u00f3n de actualizaciones sobre los servicios) integrado.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">No es necesaria ninguna instalaci\u00f3n extra para tenerlo disponible con Docker.\u00a0<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span style=\"font-weight: 400;\"><strong>\u00bfDeber\u00edas plantearte implementar Docker en tus proyectos?<\/strong> <\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Desde Making Science pensamos que es una muy buena elecci\u00f3n si se trata de un entorno de pruebas en el cual se compone de varios microservicios. <\/span><span style=\"font-weight: 400;\">La opci\u00f3n es atractiva debido a que se pueden configurar las redes de cada microservicio y las caracter\u00edsticas de cada uno de ellos de manera sencilla, pero, debido a sus similitudes con Kubernetes, hace que en entorno de producci\u00f3n la adopci\u00f3n de Kubernetes sea muy superior.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker Swarm es una herramienta software que permite ejecutar los contenedores en una granja de nodos, esto implica uno o varios balanceadores de carga implementados en uno o varios nodos maestros y los nodos que prestan el servicio, implementados en nodos trabajadores. Los contenedores que se ejecutan en modo Swarm se les denomina en ocasiones [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":27188,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[307,363],"class_list":["post-27135","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology-ai","tag-docker","tag-docker-swarm"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/27135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/comments?post=27135"}],"version-history":[{"count":0,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/posts\/27135\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media\/27188"}],"wp:attachment":[{"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/media?parent=27135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/categories?post=27135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.makingscience.com\/es\/wp-json\/wp\/v2\/tags?post=27135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}