¿Cuál es la diferencia entre Docker Compose y Kubernetes?

329

Al sumergirse en Docker, Google Cloud y Kubernetes, y sin comprender claramente a los tres todavía, me parece que estos productos se superponen, pero no son compatibles.

Por ejemplo, un docker-compose.ymlarchivo debe reescribirse para que se pueda implementar una aplicación en Kubernetes.

¿Podría alguien 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?

George Katsanos
fuente

Respuestas:

482

Docker :

  • Docker es la tecnología de contenedores que le permite contener sus aplicaciones en contenedores.
  • Docker es el núcleo del uso de otras tecnologías.

Docker Compose

  • Docker Compose permite configurar e iniciar múltiples contenedores Docker.
  • Docker Compose se usa principalmente como ayuda cuando quieres iniciar múltiples contenedores Docker y no quieres iniciar cada uno por separado docker run ....
  • Docker Compose se usa para iniciar contenedores en el mismo host.
  • Docker Compose se usa en lugar de todos los parámetros opcionales al crear y ejecutar un único contenedor de docker.

Enjambre Docker

  • Docker Swarm es para ejecutar y conectar contenedores en varios hosts.
  • Docker Swarm es una herramienta de gestión y organización de clústeres de contenedores.
  • Gestiona contenedores que se ejecutan en varios hosts y hace cosas como escalar, iniciar un nuevo contenedor cuando se bloquea, contenedores de red ...
  • Docker Swarm es Docker en producción. Es la herramienta de orquestación nativa de Docker que está incrustada en Docker Engine.
  • El archivo Docker Swarm denominado archivo de pila es muy similar a un archivo Docker Compose.

Kubernetes

  • Kubernetes es una herramienta de orquestación de contenedores desarrollada por Google.
  • El objetivo de Kubernetes es muy similar al de Docker Swarm.

Docker Cloud

  • Un servicio docker empresarial de pago que le permite construir y ejecutar contenedores en servidores en la nube o servidores locales.
  • Proporciona una interfaz de usuario web y un panel de control central para ejecutar y administrar contenedores al tiempo que proporciona todas las características de Docker en una interfaz web fácil de usar.

Actualizar:

Nube Docker "parcialmente" descontinuada

Los servicios en Docker Cloud que proporcionan administración de clústeres de aplicaciones, nodos y enjambres se cerrarán el 21 de mayo [2020] ... las compilaciones automatizadas y los servicios de almacenamiento de registro no se verán afectados y continuarán estando disponibles

yamenk
fuente
Todo bien, sobre lo último "Docker cloud, te permite ejecutar contenedores ..." prácticamente, ¿qué puedes hacer con ejecutar estos contenedores en la nube? ¿Pueden proporcionar puntos finales de acceso público? Básicamente, ¿es una nube acoplable algo así como AWS pero para los contenedores acoplables? (o es solo una biblioteca contenedor para el descubrimiento)
George Katsanos
2
OK lo siento. Creo que todavía estoy confundido. Entonces, ¿eso significa que Docker-compose es como Kubernetes en que se usa para orquestar contenedores localmente y es más conveniente para el desarrollo local o Kubernetes es mucho más que esto?
Vipin Menon
66
¿Es justo hacer la siguiente analogía? 1. docker-compose <> minikube 2. docker-swarm <> clúster de kubernetes 3. docker-cloud <> clúster de kubernetes administrado por GCP, AWS, etc.
Anoop
1
"El enjambre Docker es para ejecutar y CONECTAR contenedores en varios hosts". : ¿Qué significa "conectar" aquí? ¿Conexión de red?
someone_ smiley
1
@someone_smiley Sí. Crea una red superpuesta
OneCricketeer
136

Además de la respuesta de @yamenk , me gustaría agregar algunos detalles aquí que podrían ayudar a las personas con su viaje de comprensión de Kubernetes.

Respuesta corta:

  • docker-compose: es una herramienta que toma un archivo YAML que describe su aplicación de contenedores múltiples y lo ayuda a crear , iniciar / detener , eliminar todos esos contenedores sin tener que escribir múltiples docker ...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 ...

Docker Compose

(de los documentos): Compose es una herramienta para definir y ejecutar aplicaciones Docker de contenedores múltiples. Con Compose, utiliza un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración.

Compose tiene comandos para administrar 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 de registro de los servicios en ejecución
  • Ejecute 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 asegurarnos de que las aplicaciones:

  • son tolerantes a fallas,
  • puede escalar y hacer esto a pedido
  • utilizar los recursos de manera óptima
  • puede descubrir otras aplicaciones automáticamente y comunicarse entre sí
  • son accesibles desde el mundo externo
  • puede actualizar / revertir sin tiempo de inactividad.

Mucha gente argumenta que Kubernetes es difícil de aprender. Es porque resuelve una serie de problemas y las personas intentan comprender sin conocer todos los requisitos previos. Esto lo hace complicado. Comience a armar las piezas del rompecabezas leyendo sobre conceptos / términos como los siguientes. Este proceso lo ayudará a comprender el tipo de problemas que Kubernetes intenta resolver:

  • Aplicaciones de 12 factores,
  • Embalaje automático,
  • Mecanismos de autocuración,
  • Escala horizontal,
  • Descubrimiento de servicio y equilibrio de carga,
  • Lanzamientos y retrocesos automatizados,
  • Despliegues azul-verde / Despliegues canarios
  • Secretos y gestión de la configuración,
  • Orquestación de almacenamiento

Y debido a que hay muchas cosas diferentes en torno a los contenedores y su gestión, vigile el paisaje de Cloud Native:

Versión interactiva aquí: landscape.cncf.io/

ingrese la descripción de la imagen aquí

Actualizaciones

Mayo de 2020: Docker Compose Specification ahora en un estándar abierto

Trabajando con AWS, Microsoft y otros en la comunidad de código abierto, hemos ampliado la especificación de composición para admitir plataformas nativas de la nube como Kubernetes y Amazon ECS, además de las plataformas de composición existentes. Más aquí: blog / compose-spec.io

tgogos
fuente
Esta respuesta está desactualizada. docker.com/blog/…
OneCricketeer
1
Gracias @ cricket_007 Estaré atento a esto, pero creo que esta publicación de blog de 2018 es una especie de ... "marketing". Es 2020 y si revisa los documentos en Docker Compose y en la referencia de la versión 3 del archivo Compose, no hay nada sobre Kubernetes.
Tgogos
¿Entonces? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
¡Oh, increíble que haya una capa de composición que abstraiga toda la sintaxis de Kubernetes! Gracias @ cricket_007.
George Katsanos
28

Si tiene contenedores de red con el mismo host, vaya a componer docker .

Si tiene contenedores de red en varios hosts, elija kubernetes .

Aniket Alhat
fuente
2
¡Ese es el tipo de respuesta que esperaba! Aunque podría tener alguna explicación más, la parte "tl; dr" es realmente el punto. ¡Ninguna de las otras respuestas realmente dice eso!
El padrino
8

La primera distinción es entre el motor del contenedor y el orquestador del contenedor.

docker es un motor de contenedor, te hace construir y ejecutar generalmente no más de un contenedor como máximo, localmente en tu PC para fines de desarrollo.

docker-compose es una utilidad Docker para ejecutar múltiples contenedores y les permite compartir volúmenes y redes a través de las características del motor Docker, se ejecuta localmente para emular la composición del servicio y de forma remota en clústeres.

Kubernetes es una plataforma de orquestación de contenedores, se encarga de ejecutar contenedores y mejorar las características del motor para que los contenedores se puedan componer y escalar para servir aplicaciones complejas (tipo de PaaS, administrado por usted o el proveedor de la nube). La característica principal de Kubernetes es desacoplar la infraestructura de la aplicación que usa contenedores, y también está abierta para otros motores que Docker, por ejemplo, puede ejecutar contenedores con rkt o cri-o.

Docker Cloud también es una oferta de PaaS que le permitirá ejecutar y orquestar contenedores a través de la dockerAPI del motor.

Ahora, según sus necesidades, el nivel de control de la infraestructura y el público objetivo, puede usar Kubernetes en baremetal, Azure ACS o Google GKE, etc.

Espero que esto haya ayudado :) Saludos

Francesco Gualazzi
fuente
1
Estoy un poco confundido, ¿por qué usualmente solo ejecutas un contenedor en la ventana acoplable? Si bien creo que Docker-compose es una mejor solución, ¡no hay nada que le impida iniciar múltiples contenedores sin él!
Peter
oh sí, a veces tengo un mysql ejecutándose en segundo plano y luego comenzando httpd y nginx como contenedores independientes ... pero luego, cuando quiera todo automatizado, definitivamente construiré un docker-compose.yml para especificar dependencias, redes, etc. ..
Francesco Gualazzi
6

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 apuestas de mesa para un uso serio de producción. 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 lo ofrecen todos los principales proveedores de la nube. Kubernetes es mucho más capaz y tiene mucho más apoyo comunitario y corporativo.

Recomendaría sumergirse en algunos de los tutoriales de Kubernetes disponibles en Pluralsight, Linux Academy, etc. y girar un clúster para jugar en su plataforma de nube de elección (EKS, AKS, GKE, etc.). Si está tratando de girar sobre metal desnudo, eche un vistazo a OpenShift, pero reconozca que pierde algo de la magia de Kubernetes en esta configuración.

Ashok Reddy
fuente
Acordó que k8s ha "ganado" (por ahora). Pero a Mesos solía referirse como el estándar de oro para los grupos de producción . DC / OS hizo un buen trabajo al impulsar las características empresariales, pero ahora incluso puede ejecutar múltiples clústeres k8s dentro de un entorno Mesos y acceder a ellos desde una única plataforma independiente del proveedor, ¿cuál es realmente mejor?
OneCricketeer
3

Docker Compose:

En un docker-compose.ymlarchivo, cada entrada puede llegar opcionalmente docker-composea construir una imagen. cada entrada puede representar un único contenedor que queremos construir y cada entrada define los requisitos de red o puertos.

Kubernetes:

Kubernetes espera que todas las imágenes ya estén construidas y hay un archivo de configuración por objeto que queremos crear y tenemos que configurar manualmente todas las redes.

Por lo tanto, nos aseguramos de que nuestra imagen esté alojada en Docker Hub, cree un archivo de configuración para crear el contenedor y un archivo de configuración para configurar la red.

Daniel
fuente
1

Docker-Compose es un archivo de implementación que predefinió uno o más contenedores con su entorno, como volúmenes, redes, un comando para ejecutar, etc.

Kubernetes, por otro lado, es un sistema que organiza contenedores docker y otros microservicios y los hace escalables y confiables en múltiples nodos

Yaniv Hakim
fuente
1

Docker compose: los contenedores docker se pueden ejecutar directamente sin ayuda de ningún archivo yaml. Pero con la ayuda de la herramienta de compilación de Docker, las propiedades del contenedor se pueden definir dentro de un archivo llamado docker-compose.yml. encuentre el archivo yml de muestra a continuación para obtener más detalles.

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

El nombre de la imagen, el número de réplicas, etc. se pueden configurar a través del archivo yml.

Kubernetes: esta es la plataforma de administración de contenedores que se ejecuta sobre Docker, creada por Google. Docker Swam es otra plataforma de gestión de contenedores construida por Docker. Kubernetes también ofrece la posibilidad de guardar la configuración relacionada con los pods (corresponde al contenedor en la ventana acoplable) en el archivo yaml como docker compose. ejemplo de archivo yaml

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

aquí también se pueden proporcionar imágenes, puertos que se abrirán y mapeos para alojar puertos, etc. como docker compose, kubectl apply -f es el comando para ejecutar este archivo.

Nalin Kularathna
fuente
Entonces, ¿cuál es la diferencia? =)
El padrino
docker compose es una consola para ejecutar imágenes de docker y kubernetes no es así, es un sistema de orquestación de contenedores. entonces estos dos no pueden ser comparados y totalmente diferentes. pero kubernetes tiene kubectl, también es una consola y similar a la composición de la
ventana