Quelle est la différence entre Docker Compose et Kubernetes?

329

En plongeant dans Docker, Google Cloud et Kubernetes, et sans bien les comprendre tous les trois, il me semble que ces produits se chevauchent, mais ils ne sont pas compatibles.

Par exemple, un docker-compose.ymlfichier doit être réécrit pour qu'une application puisse être déployée sur Kubernetes.

Quelqu'un pourrait-il fournir une description approximative de haut niveau de l'endroit où Docker, Docker Compose, Docker Cloud et Kubernetes se chevauchent et où l'un dépend de l'autre?

George Katsanos
la source

Réponses:

482

Docker :

  • Docker est la technologie de conteneur qui vous permet de conteneuriser vos applications.
  • Docker est au cœur de l'utilisation d'autres technologies.

Docker Compose

  • Docker Compose permet de configurer et de démarrer plusieurs conteneurs Docker.
  • Docker Compose est principalement utilisé comme aide lorsque vous souhaitez démarrer plusieurs conteneurs Docker et que vous ne voulez pas démarrer chacun séparément à l'aide docker run ....
  • Docker Compose est utilisé pour démarrer des conteneurs sur le même hôte.
  • Docker Compose est utilisé à la place de tous les paramètres facultatifs lors de la création et de l'exécution d'un seul conteneur Docker .

Docker Swarm

  • Docker Swarm permet d'exécuter et de connecter des conteneurs sur plusieurs hôtes.
  • Docker Swarm est un outil de gestion et d'orchestration de cluster de conteneurs.
  • Il gère les conteneurs fonctionnant sur plusieurs hôtes et fait des choses comme la mise à l'échelle, le démarrage d'un nouveau conteneur en cas de panne, la mise en réseau de conteneurs ...
  • Docker Swarm est Docker en production. Il s'agit de l' outil d'orchestration Docker natif intégré au moteur Docker.
  • Le fichier Docker Swarm nommé fichier de pile est très similaire à un fichier Docker Compose.

Kubernetes

  • Kubernetes est un outil d'orchestration de conteneurs développé par Google.
  • L'objectif de Kubernetes est très similaire à celui de Docker Swarm.

Docker Cloud

  • Un service de docker d'entreprise payant qui vous permet de créer et d'exécuter des conteneurs sur des serveurs cloud ou des serveurs locaux.
  • Il fournit une interface utilisateur Web et un panneau de contrôle central pour exécuter et gérer les conteneurs tout en fournissant toutes les fonctionnalités Docker dans une interface Web conviviale.

Mettre à jour:

Docker cloud «partiellement» arrêté

Les services sur Docker Cloud qui fournissent la gestion des applications, des nœuds et des clusters en essaim seront fermés le 21 mai [2020] ... les versions automatisées et les services de stockage du registre, ne seront pas affectés et continueront d'être disponibles

yamenk
la source
Très bien, à propos de la dernière chose "Docker cloud, vous permet d'exécuter des conteneurs .." pratiquement, que pouvez-vous faire avec l'exécution de ces conteneurs sur le cloud? peuvent-ils fournir des points de terminaison accessibles au public? est essentiellement un cloud docker quelque chose comme AWS mais pour les conteneurs docker? (ou est-ce juste une bibliothèque de conteneurs pour la découverte)
George Katsanos
2
D'accord désolé. Je pense que je suis toujours confus. Cela signifie-t-il donc que docker-compose est comme Kubernetes en ce qu'il est utilisé pour orchestrer les conteneurs localement et est plus pratique pour le développement local ou est-ce que Kubernetes est bien plus que cela?
Vipin Menon
6
Est-il juste de faire l'analogie suivante 1. docker-compose <> minikube 2. docker-swarm <> cluster kubernetes 3. docker-cloud <> cluster kubernetes géré par GCP, AWS, etc.
Anoop
1
"L'essaim Docker sert à exécuter et à CONNECTER des conteneurs sur plusieurs hôtes." : Que signifie "se connecter" ici? Connexion réseau?
quelqu'un_ smiley
1
@someone_smiley Oui. Il crée un réseau de superposition
OneCricketeer
136

En plus de la réponse de @ yamenk , j'aimerais ajouter ici quelques détails qui pourraient aider les gens dans leur cheminement vers la compréhension de Kubernetes.

Réponse courte:

  • docker-compose: est un outil qui prend un fichier YAML qui décrit votre application multi-conteneurs et vous aide à créer , démarrer / arrêter , supprimer tous ces conteneurs sans avoir à taper plusieurs docker ...commandes pour chaque conteneur.
  • Kubernetes: est une plateforme de gestion des charges de travail et des services conteneurisés , qui facilite à la fois la configuration déclarative et l'automatisation. ? Continuez à lire ...

Docker Compose

(à partir des documents): Compose est un outil pour définir et exécuter des applications Docker multi-conteneurs. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services à partir de votre configuration.

Compose dispose de commandes pour gérer l'ensemble du cycle de vie de votre application:

  • Démarrer, arrêter et reconstruire des services
  • Afficher l'état des services en cours d'exécution
  • Diffusez la sortie du journal des services en cours d'exécution
  • Exécuter une commande unique sur un service

Kubernetes

(de Introduction à Kubernetes ): Kubernetes est un orchestrateur de conteneurs comme Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Les orchestrateurs de conteneurs sont les outils qui regroupent les hôtes pour former un cluster et nous aident à nous assurer que les applications:

  • sont tolérants aux pannes,
  • peut évoluer, et le faire à la demande
  • utiliser les ressources de manière optimale
  • peut découvrir automatiquement d'autres applications et communiquer entre elles
  • sont accessibles depuis le monde extérieur
  • peut mettre à jour / restaurer sans aucun temps d'arrêt.

Beaucoup de gens soutiennent que Kubernetes est difficile à apprendre. C'est parce qu'il résout une série de problèmes et que les gens essaient de comprendre sans connaître toutes les conditions préalables. Cela complique les choses. Commencez à assembler les pièces du puzzle en lisant des concepts / termes tels que les suivants. Ce processus vous aidera à comprendre le type de problèmes que Kubernetes essaie de résoudre:

  • Applications à 12 facteurs,
  • Binpacking automatique,
  • Mécanismes d'auto-guérison,
  • Mise à l'échelle horizontale,
  • Découverte de services et équilibrage de charge,
  • Déploiements et restaurations automatisés,
  • Déploiements Blue-Green / Déploiements Canaries
  • Secrets et gestion de configuration,
  • Orchestration du stockage

Et parce qu'il y a beaucoup de choses différentes autour des conteneurs et de leur gestion, gardez un œil sur le paysage Cloud Native:

Version interactive ici: landscape.cncf.io/

entrez la description de l'image ici

Mises à jour

Mai 2020: Docker Compose Specification est désormais un standard ouvert

En collaboration avec AWS, Microsoft et d'autres membres de la communauté open source, nous avons étendu la spécification Compose pour prendre en charge les plates-formes natives du cloud comme Kubernetes et Amazon ECS en plus des plates-formes Compose existantes. Plus ici: blog / compose-spec.io

tgogos
la source
Cette réponse est dépassée. docker.com/blog/…
OneCricketeer
1
Merci @ cricket_007 Je garderai un œil sur cela, mais je pense que ce billet de blog de 2018 est en quelque sorte ... "marketing". Nous sommes en 2020 et si vous consultez les documents sur Docker Compose et Compose file version 3 reference, il n'y a rien sur Kubernetes.
tgogos
Alors? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
oh, incroyable qu'il y ait une couche de composition qui résume toute la syntaxe de kubernetes! Merci @ cricket_007.
George Katsanos
28

Si vous mettez en réseau des conteneurs avec le même hôte, choisissez Docker Composer .

Si vous mettez en réseau des conteneurs sur plusieurs hôtes, optez pour kubernetes .

Aniket Alhat
la source
2
C'est le type de réponse que j'attendais! Même si cela pourrait avoir plus d'explications, la partie "tl; dr" est vraiment le point. Aucune des autres réponses ne le dit vraiment!
The Godfather
8

la première distinction est entre le moteur de conteneur et l'orchestrateur de conteneur.

docker est un moteur de conteneur, il vous permet de créer et d'exécuter généralement pas plus d'un conteneur au maximum, localement sur votre PC à des fins de développement.

docker-compose est un utilitaire Docker pour exécuter plusieurs conteneurs et leur permettre de partager des volumes et la mise en réseau via les fonctionnalités du moteur Docker, s'exécute localement pour émuler la composition des services et à distance sur des clusters.

Kubernetes est une plate-forme d'orchestration de conteneurs, elle s'occupe de l'exécution des conteneurs et de l'amélioration des fonctionnalités du moteur afin que les conteneurs puissent être composés et mis à l'échelle pour servir des applications complexes (sorte de PaaS, géré par vous ou fournisseur de cloud). La principale fonctionnalité de Kubernetes est de dissocier l'infrastructure de l'application à l'aide de conteneurs, et elle est également ouverte pour d'autres moteurs que Docker, par exemple, il peut exécuter des conteneurs avec rkt ou cri-o.

Docker cloud est également une offre PaaS qui vous permettra d'exécuter et d'orchestrer des conteneurs via l' dockerAPI du moteur.

Maintenant, selon vos besoins, le niveau de contrôle de l'infrastructure et le public cible, vous pouvez utiliser Kubernetes sur baremetal, ou Azure ACS ou Google GKE, etc.

J'espère que cela vous a aidé :) Cordialement

Francesco Gualazzi
la source
1
Je suis un peu confus pourquoi ne lancez-vous généralement qu'un seul conteneur sur docker? Bien que je pense que Docker-compose est une meilleure solution, rien ne vous empêche de démarrer plusieurs conteneurs sans!
Peter
oh oui, parfois j'ai un mysql fonctionnant en arrière-plan puis démarrant httpd et nginx en tant que conteneurs autonomes ... mais alors quand je veux que tout soit automatisé, je vais certainement construire un docker-compose.yml pour spécifier les dépendances, les réseaux, etc. ..
Francesco Gualazzi
6

Docker Compose n'est pas un outil prêt pour la production. Il fonctionne très bien pour les environnements PoC ou de développement, mais manque de nombreuses fonctionnalités qui sont plus ou moins des enjeux de table pour une utilisation sérieuse en production. Swarm est plus prêt pour la production, mais je n'investirais jamais dans Swarm dans un scénario entièrement nouveau. Kubernetes a remporté la bataille de l'orchestration, comme en témoigne son inclusion dans Docker Desktop et son offre par tous les principaux fournisseurs de cloud. Kubernetes est beaucoup plus performant et bénéficie d'un soutien beaucoup plus important de la communauté et des entreprises.

Je recommanderais de plonger dans certains des tutoriels Kubernetes disponibles à Pluralsight, Linux Academy, etc. et de faire tourner un cluster pour jouer avec dans la plate-forme cloud de votre choix (EKS, AKS, GKE, etc.). Si vous essayez de tourner sur du métal nu, jetez un œil à OpenShift, mais reconnaissez que vous perdez une partie de la magie de Kubernetes dans cette configuration.

Ashok Reddy
la source
Convenu que k8s a "gagné" (pour l'instant). Mais Mesos était appelé l' étalon-or pour les clusters de production . DC / OS a fait un excellent travail pour sortir les fonctionnalités de l'entreprise, mais maintenant vous pouvez même exécuter plusieurs clusters k8s dans un environnement Mesos et y accéder à partir d'une seule plate-forme indépendante du fournisseur, ce qui est vraiment mieux?
OneCricketeer
3

Docker Composer:

Dans un docker-compose.ymlfichier, chaque entrée peut éventuellement docker-composecréer une image. chaque entrée peut représenter un seul conteneur que nous voulons construire et chaque entrée définit les exigences de réseau ou les ports.

Kubernetes:

Kubernetes s'attend à ce que toutes les images soient déjà construites et il y a un fichier de configuration par objet que nous voulons créer et nous devons configurer manuellement tous les réseaux.

Nous nous assurons donc que notre image est hébergée sur Docker Hub, créez un fichier de configuration pour créer le conteneur et un fichier de configuration pour configurer la mise en réseau.

Daniel
la source
1

Docker-Compose est un fichier de déploiement qui a prédéfini un ou plusieurs conteneurs avec son environnement tels que les volumes, la mise en réseau, une commande à exécuter, etc.

Kubernetes, d'autre part, est un système qui orchestre les conteneurs de docker et d'autres microservices et les rend évolutifs et fiables sur plusieurs nœuds

Yaniv Hakim
la source
1

Docker compose: les conteneurs docker peuvent être exécutés directement sans l'aide de n'importe quel fichier yaml. Mais avec l'aide de Docker, les propriétés du conteneur de l'outil de composition peuvent être définies dans un fichier appelé fichier docker-compose.yml. veuillez trouver l'exemple de fichier yml ci-dessous pour plus de détails.

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

le nom de l'image, le nombre de répliques, etc. peuvent être configurés via le fichier yml.

Kubernetes: Il s'agit d'une plate-forme de gestion de conteneurs exécutée sur Docker créée par Google. Docker Swam est une autre plateforme de gestion de conteneurs construite par Docker lui-même. Kubernetes fournit également une fonction pour enregistrer la configuration liée aux pods (correspond au conteneur dans le docker) dans un fichier yaml comme docker compose. exemple de fichier 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

ici aussi des images, des ports à ouvrir et des pods pour héberger des mappages de ports, etc. peuvent être donnés. comme docker compose, kubectl apply -f est la commande pour exécuter ce fichier.

Nalin Kularathna
la source
Alors, quelle est la différence? =)
Le parrain
docker compose est une console pour exécuter des images docker et kubernetes n'est pas comme s'il s'agissait d'un système d'orchestration de conteneurs. donc ces deux ne peuvent pas être comparés et totalement différents. mais kubernetes a kubectl c'est aussi une console et similaire au docker compose
Nalin Kularathna