¿Cuál es la diferencia entre Docker Compose y Kubernetes?
Mientras me sumerjo en Docker, Google Cloud y Kubernetes, y sin comprender claramente los tres todavía, me parece que estos productos se superponen, pero no son compatibles.
Por ejemplo, docker-compose.yml
es necesario reescribir un archivo para poder implementar una aplicación en Kubernetes.
¿Alguien podría proporcionar una descripción aproximada de alto nivel de dónde se superponen Docker, Docker Compose, Docker Cloud y Kubernetes y dónde uno depende del otro?
Contenedores :
- Los contenedores son el núcleo de las otras tecnologías enumeradas aquí.
acoplador :
- Docker es una implementación popular de la tecnología que permite agrupar aplicaciones en un contenedor.
docker
es una herramienta de línea de comandos para administrar imágenes, contenedores, volúmenes y redes
Composición acoplable
- Docker Compose es la versión declarativa de Docker CLI
- Puede iniciar uno o más contenedores.
- Puede crear una o más redes y adjuntarles contenedores.
- Puede crear uno o más volúmenes y configurar contenedores para montarlos.
- Todo esto es para usar en un solo host .
Enjambre clásico de Docker
- Docker Inc. ha abandonado Docker swarm y no recibe mantenimiento ni soporte activo.
- Docker Swarm sirve para ejecutar y conectar contenedores en múltiples hosts.
- Docker Swarm es una herramienta de orquestación y gestión de clústeres de contenedores.
- Gestiona contenedores que se ejecutan en múltiples hosts y hace cosas como escalar, iniciar un nuevo contenedor cuando uno falla, conectar contenedores en red...
- El archivo Docker Swarm llamado archivo de pila es muy similar a un archivo Docker Compose
- La única comparación entre Kubernetes y Compose es al nivel más trivial y sin importancia: ambos ejecutan contenedores, pero esto no dice nada para ayudar a entender qué son las dos herramientas y dónde son útiles. Ambos son útiles para diferentes cosas.
Kubernetes
- Kubernetes (K8S) es una herramienta de orquestación de contenedores distribuidos creada inicialmente por Google
- Fue de código abierto en 2014 y entregado a la Cloud Native Computing Foundation (CNCF) al año siguiente.
- La CNCF es un organismo industrial con cientos de miembros provenientes de la mayoría de las grandes empresas de nube, software y hardware.
- En el momento de redactar este artículo (finales de 2021), hay casi mil proyectos relacionados con K8S divididos en unas veinte clases con un total de más de 21 mil millones de dólares en financiación.
- Kubernetes (2021) es el orquestador de sistemas distribuidos más popular del mundo con un 88% de adopción
- Debido a su casi ubicuidad, K8S se ha convertido en la plataforma contemporánea más popular para el desarrollo de sistemas innovadores en 2021.
- Kubernetes es un competidor (más o menos) de Docker Swarm, pero hace más cosas que Docker Swarm, es decir, una opción popular.
Además de la respuesta de @yamenk , me gustaría agregar algunos detalles aquí que podrían ayudar a las personas en su proceso de comprensión de Kubernetes.
Respuesta corta:
docker-compose
: es una herramienta que toma un archivo YAML que describe su aplicación de múltiples contenedores y lo ayuda a crear , iniciar/detener y eliminar todos esos contenedores sin tener que escribir múltiplesdocker ...
comandos para cada contenedor.Kubernetes
: es una plataforma para gestionar cargas de trabajo y servicios en contenedores, que facilita tanto la configuración declarativa como la automatización. ¿Qué? 🤔 Sigue leyendo...
Composición acoplable
(de los documentos): Compose es una herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores. Con Compose, utiliza un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, creas e inicias todos los servicios desde tu configuración. Compose tiene comandos para gestionar todo el ciclo de vida de su aplicación:
- Iniciar, detener y reconstruir servicios
- Ver el estado de los servicios en ejecución
- Transmita la salida del registro de los servicios en ejecución
- Ejecutar un comando único en un servicio
Kubernetes
(de Introducción a Kubernetes ): Kubernetes es un orquestador de contenedores como Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Los orquestadores de contenedores son las herramientas que agrupan los hosts para formar un clúster y nos ayudan a garantizar que las aplicaciones:
- son tolerantes a fallos,
- puede escalar y hacer esto bajo demanda
- utilizar los recursos de manera óptima
- pueden descubrir otras aplicaciones automáticamente y comunicarse entre sí
- son accesibles desde el mundo exterior
- puede actualizar/revertir sin ningún tiempo de inactividad.
Mucha gente sostiene que Kubernetes es difícil de aprender. Es porque resuelve una serie de problemas y la gente intenta comprenderlos sin conocer todos los requisitos previos. Esto lo hace complicado. Comience a juntar las piezas del rompecabezas leyendo sobre conceptos/términos como los siguientes. Este proceso le ayudará a comprender el tipo de problemas que Kubernetes intenta resolver:
- aplicaciones de 12 factores,
- embalaje automático en contenedores,
- Mecanismos de autocuración,
- escala horizontal,
- Descubrimiento de servicios y equilibrio de carga,
- Implementaciones y reversiones automatizadas,
- Implementaciones azul-verde/implementaciones canarias
- Gestión de secretos y configuración,
- Orquestación de almacenamiento
Y debido a que hay muchas cosas diferentes en torno a los contenedores y su administración, esté atento al panorama de Cloud Native:
Versión interactiva aquí: paisaje.cncf.io/
Actualizaciones
Mayo de 2020: la especificación Docker Compose ahora es un estándar abierto
Trabajando con AWS, Microsoft y otros en la comunidad de código abierto, hemos ampliado la especificación Compose para admitir plataformas nativas de la nube como Kubernetes y Amazon ECS, además de las plataformas Compose existentes. Más aquí: blog / compose-spec.io
Si está conectando contenedores dentro del mismo host, elija Docker Compose .
Si está conectando contenedores en varios hosts, opte por kubernetes .
Docker Compose no es una herramienta lista para producción. Funciona muy bien para PoC o entornos de desarrollo, pero carece de muchas de las capacidades que son más o menos fundamentales para un uso de producción serio. Swarm está más preparado para la producción, pero nunca invertiría en Swarm en un escenario totalmente nuevo. Kubernetes ha ganado la batalla de la orquestación, como lo demuestra su inclusión en Docker Desktop y su oferta de todos los principales proveedores de nube. Kubernetes es mucho más capaz y tiene mucho más apoyo comunitario y corporativo.
Recomendaría profundizar en algunos de los tutoriales de Kubernetes disponibles en Pluralsight, Linux Academy, etc. y crear un clúster para jugar en la plataforma en la nube de su elección (EKS, AKS, GKE, etc.). Si está intentando avanzar sobre metal desnudo, eche un vistazo a OpenShift, pero reconozca que pierde parte de la magia de Kubernetes en esta configuración.