Docker Compose frente a Docker Swarm

Docker Compose Vs Docker Swarm



Con la 'revolución' de contenedores, las aplicaciones han crecido mucho más que ser solo una base de datos y una interfaz. Las aplicaciones se dividen en varios microservicios y, por lo general, se comunican entre sí a través de una API REST (por lo general, cargas útiles con formato JSON a través de HTTP). Los contenedores Docker son ideales para este tipo de arquitectura. Puede empaquetar su 'microservicio' de interfaz en un contenedor Docker, la base de datos pasa a otro, y así sucesivamente. Cada servicio habla con otro a través de 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, por ejemplo, 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 crezca con el tiempo, esta lista de microservicios también crecerá.







No desea implementar cada contenedor individual, configurarlo y luego configurar todo lo demás para comunicarse con él también. Eso se volverá tedioso incluso con tres contenedores. Docker-Compose le permite automatizar la implementación de varios contenedores.



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



Sistemas distribuidos

Ahora que hemos dividido la aplicación web en varios contenedores, tiene poco sentido mantenerlos 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 múltiples servidores. Si su microservicio está escrito de manera que pueda escalar 'horizontalmente', entonces 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. Por lo general, esto se realiza mediante un subcomando en Docker, es decir, Docker Stack.

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



Fuente de confusión

En términos de uso y flujo de trabajo, ambas tecnologías funcionan de manera muy similar entre sí, y esto genera confusión. La forma en que implementa su aplicación usando Docker Swarm o Docker-Compose es muy similar. Usted define su aplicación en un archivo YAML, este archivo contendrá el nombre de la imagen, la configuración de 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-compose implementa el contenedor en un solo host de Docker, Docker Swarm lo implementa en varios nodos. Hablando en términos generales, todavía puede hacer la mayoría de las cosas que puede hacer docker-compose, pero lo escala en varios hosts de Docker.

Similitudes

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

  1. Ambos toman definiciones formateadas YAML de su pila de aplicaciones.
  2. Ambos están destinados a trabajar con aplicaciones de varios contenedores (microservicios)
  3. Ambos tienen un parámetro de escala que le permite ejecutar varios contenedores de la misma imagen, lo que permite que su microservicio se escale horizontalmente.
  4. Ambos son mantenidos por la misma empresa, es decir, 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. Escalar su aplicación web Docker Swarm ofrece una gran disponibilidad y tolerancia a fallas. Escalar su aplicación web usando Docker-Compose en un solo host es útil solo para pruebas y desarrollo.
  3. Docker Swarm y los subcomandos relacionados como Docker Swarm y Docker Stack están integrados en la propia CLI de Docker. Todos son parte del binario de Docker al que llama a través de su terminal. Docker-Compose es un binario independiente en sí mismo.

Un caso de uso de Docker-Compose

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

Suponga que desea autohospedar 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 defina todos los aspectos de su pila de WordPress, como a continuación, :

Nota: Si está utilizando lo siguiente para implementar un sitio de WordPress, cambie todas las contraseñas a algo seguro. Mejor aún, use Docker Secrets 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:/dónde/lib/mysql
reiniciar: siempre
medio 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
medio 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:

$ventana acoplable-componer-D

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

$docker-componer abajo

Luego, deseche las imágenes antiguas de Docker y ejecute el comando docker-compose up -d y las nuevas imágenes se extraerán automáticamente. 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á diseñado para aplicaciones más exigentes. Aplicaciones web con cientos o miles de usuarios o carga de trabajo que se debe escalar en paralelo. Las empresas con una gran base de usuarios y estrictos requisitos de SLA querrían utilizar un sistema distribuido como Docker Swarm. Si su aplicación se ejecuta en múltiples servidores y múltiples centros de datos, las posibilidades de tiempo de inactividad debido a un DC o enlace de red afectado se reducen significativamente.

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

Conclusión

Espero que este divagar sobre Docker y sus proyectos satelitales haya sido informativo y esté más preparado para el ecosistema de Docker.