Docker Compose vs Docker Swarm

Docker Compose vs Docker Swarm

Aplicaciones web y microservicios

Con las aplicaciones de "revolución" del contenedor han crecido mucho más que ser solo una base de datos y una frontend. Las aplicaciones se dividen en varios microservicios y generalmente se comunican entre sí a través de una API REST (generalmente cargas útiles formateadas por JSON a través de HTTP). Los contenedores de Docker son ideales para este tipo de arquitectura. Puede empaquetar su 'microservicio' frontend en un contenedor Docker, la base de datos entra en otra, y así sucesivamente. Cada servicio habla con otro sobre una API REST predefinida en lugar de ser un monolito escrito como una sola pieza de software.

Si necesita implementar una nueva funcionalidad o una característica, e.G, un motor de análisis, simplemente puede escribir un nuevo microservicio para eso y consumiría datos a través de la API REST expuesta por los diversos microservicios de su aplicación web. Y a medida que su funcionalidad crece con el tiempo, esta lista de microservicios crecerá junto con ella también.

No desea implementar cada contenedor individual, configurarlo y luego configurar todo lo demás para hablar con él también. Que se pondrá tedioso incluso con tres contenedores. Docker-composa le permite automatizar la implementación de múltiples contenedores.

Docker-Compose es una de las herramientas más simples que lo ayuda a transformar la idea abstracta de los microservicios en un conjunto funcional de Docker Container.

Sistemas distribuidos

Ahora que hemos dividido la aplicación web en múltiples contenedores, tiene poco sentido mantenerlos a todos en un solo servidor (peor aún en una sola máquina virtual!) ahí es donde entran en juego servicios como Docker Swarm y Kubernetes.

Docker Swarm le permite ejecutar múltiples réplicas de su aplicación en varios servidores. Si su microservicio se escribe de manera que pueda escalar 'horizontalmente', puede usar Docker Swarm para implementar su aplicación web en múltiples centros de datos y múltiples regiones. Esto ofrece resistencia contra la falla de uno o más centros de datos o enlaces de red. Esto generalmente se hace usando un subcomando en Docker, es decir, Docker Stack.

El Pila Subcommand se comporta mucho más como el comando Docker-Compose y eso puede conducir a conceptos erróneos a alguien que usa cualquiera de las tecnologías.

Fuente de confusión

En términos de uso y flujo de trabajo, ambas tecnologías funcionan muy similares entre sí, y esto causa confusión. La forma en que implementa su aplicación usando Docker Swarm o Docker-Compose es muy similar. Defina su aplicación en un archivo YAML, este archivo contendrá el nombre de la imagen, la configuración para cada imagen y también la escala (número de réplicas) que cada microservicio deberá cumplir en la implementación.

La diferencia radica principalmente en el backend, donde Docker-composo despliega contenedor en un solo host de Docker, Docker Swarm lo despliega en múltiples nodos. Hablando libremente, todavía puede hacer la mayoría de las cosas que el Docker-Compose puede, pero lo escala en múltiples hosts de Docker.

Similitudes

Tanto Docker Swarm como Docker-Compose tienen las siguientes similitudes:

  1. Ambos toman definiciones formateadas de YAML de la pila de su aplicación.
  2. Ambos están destinados a tratar con aplicaciones de contenedores múltiples (microservicios)
  3. Ambos tienen un parámetro de escala que le permite ejecutar múltiples contenedores de la misma imagen que permite que su microservicio escala horizontalmente.
  4. Ambos son mantenidos por la misma compañía, yo.E, Docker, Inc.

Diferencias

Las pocas diferencias entre Docker Swarm y Docker-Compose:

  1. Docker Swarm se utiliza para escalar su aplicación web en uno o más servidores. Donde, como Docker-Compose, simplemente ejecutará su aplicación web en un solo host de Docker.
  2. La escala de su aplicación web Docker Swarm ofrece una gran disponibilidad y tolerancia a fallas. Escalar su aplicación web utilizando Docker-Compose en un solo host es útil solo para pruebas y desarrollo.
  3. Docker Swarm y subcomands relacionados como Docker Swarm y Docker Stack están integrados en la propia CLI Docker. Todos forman parte del binario Docker que llamas a través de tu terminal. Docker-Compose es un binario independiente en sí mismo.

Un caso de uso para Docker-Compose

Como se describió anteriormente, ambas son herramientas completamente diferentes y cada una resuelve un problema completamente diferente, por lo que no es que una sea una alternativa para la otra. Sin embargo, para darle a los recién llegados una idea de lo que estoy hablando, aquí hay un caso de uso para Docker Compose.

Supongamos que desea que se haga auto-anfitrión de un blog de WordPress en un solo servidor. Configurarlo o mantenerlo, no es algo que desee hacer, manualmente, por lo que lo que haría en su lugar es instalar Docker y Docker-Compose en su VPS, crear un archivo YAML simple que define todos los diversos aspectos de su pila de WordPress, como a continuación, a continuación, :

Nota: Si está utilizando el siguiente para implementar un sitio de WordPress, cambie todas las contraseñas a algo seguro. Mejor aún, use los secretos de Docker para almacenar datos confidenciales como contraseñas, en lugar de tenerlos en un archivo de texto sin formato.

Versión: '3'
servicios:
DB:
Imagen: MySQL: 5.7
Volúmenes:
- db_data:/var/lib/mysql
reiniciar: siempre
ambiente:
Mysql_root_password: SomeWordPress
Mysql_database: WordPress
Mysql_user: WordPress
Mysql_password: WordPress
WordPress:
depende de:
- db
Imagen: WordPress: Último
Puertos:
- "8000: 80"
reiniciar: siempre
ambiente:
WordPress_DB_Host: DB: 3306
WordPress_DB_user: WordPress
WordPress_DB_Password: WordPressPassword
WordPress_DB_Name: WordPress
Volúmenes:
db_data:

Una vez que se crea el archivo y se instalan Docker y Docker-Compose, todo lo que tiene que hacer es ejecutar:

$ Docker -Compose Up -d

Y su sitio estará en funcionamiento. Si hay una actualización, ejecute:

$ Docker-Compose Down

Luego tire las viejas imágenes de Docker y ejecute el comando Docker -Compose Up -D y se extraerán automáticamente las nuevas imágenes. Dado que tiene los datos persistentes almacenados en un volumen de Docker, el contenido de su sitio web no se perderá.

Cuándo usar Docker Swarm

Si bien Docker-Compose es más una herramienta de automatización, Docker Swarm está destinado a aplicaciones más exigentes. Aplicaciones web con cientos o miles de usuarios o carga de trabajo que deben escalar paralelas. Las empresas con una gran base de usuarios y los estrictos requisitos de SLA desearían utilizar un sistema distribuido como Docker Swarm. Si su aplicación se ejecuta en múltiples servidores y múltiples centros de datos, entonces las posibilidades de inactividad debido a una DC o un enlace de red afectado se reducen significativamente.

Dicho esto, dudo en recomendar Docker Swarm para los casos de uso de producción porque las tecnologías de la competencia como Kubernetes son posiblemente más apropiadas para esta tarea. Kubernetes es compatible de forma nativa en muchos proveedores de la nube y funciona bastante bien con los contenedores Docker, por lo que ni siquiera tiene que reconstruir su aplicación para aprovechar Kubernetes.

Conclusión

Espero que este divagación en Docker y sus proyectos satelitales haya sido informativo y esté más preparado para el ecosistema de Docker.