Was ist der Unterschied zwischen Docker Compose und Kubernetes?

326

Während ich in Docker, Google Cloud und Kubernetes eintauche und noch nicht alle drei klar verstanden habe, scheinen sich diese Produkte zu überschneiden, sind aber nicht kompatibel.

Beispielsweise muss eine docker-compose.ymlDatei neu geschrieben werden, damit eine App für Kubernetes bereitgestellt werden kann.

Könnte jemand eine allgemeine, grobe Beschreibung geben, wo sich Docker, Docker Compose, Docker Cloud und Kubernetes überschneiden und wo eines vom anderen abhängig ist?

George Katsanos
quelle

Antworten:

476

Docker :

  • Docker ist die Containertechnologie, mit der Sie Ihre Anwendungen containerisieren können.
  • Docker ist der Kern der Verwendung anderer Technologien.

Docker Compose

  • Mit Docker Compose können mehrere Docker-Container konfiguriert und gestartet werden.
  • Docker Compose wird hauptsächlich als Hilfsmittel verwendet, wenn Sie mehrere Docker-Container starten und nicht jeden einzeln mit starten möchten docker run ....
  • Docker Compose wird zum Starten von Containern auf demselben Host verwendet.
  • Docker Compose wird anstelle aller optionalen Parameter verwendet, wenn ein einzelner Docker-Container erstellt und ausgeführt wird.

Hafenschwarm

  • Docker Swarm dient zum Ausführen und Verbinden von Containern auf mehreren Hosts.
  • Docker Swarm ist ein Tool zur Verwaltung und Orchestrierung von Containerclustern.
  • Es verwaltet Container, die auf mehreren Hosts ausgeführt werden, und skaliert beispielsweise, startet einen neuen Container, wenn einer abstürzt, vernetzt Container ...
  • Docker Swarm ist Docker in Produktion. Es ist das native Docker- Orchestrierungswerkzeug , das in die Docker Engine eingebettet ist.
  • Die Docker Swarm-Datei mit dem Namen Stack-Datei ist einer Docker Compose-Datei sehr ähnlich.

Kubernetes

  • Kubernetes ist ein von Google entwickeltes Container-Orchestrierungs-Tool .
  • Das Ziel von Kubernetes ist dem von Docker Swarm sehr ähnlich.

Docker Cloud

  • Ein kostenpflichtiger Docker-Dienst für Unternehmen, mit dem Sie Container auf Cloud-Servern oder lokalen Servern erstellen und ausführen können.
  • Es bietet eine Web-Benutzeroberfläche und ein zentrales Kontrollfeld zum Ausführen und Verwalten von Containern und bietet alle Docker-Funktionen in einer benutzerfreundlichen Weboberfläche.

Aktualisieren:

Docker Cloud "teilweise" eingestellt

Die Dienste in der Docker Cloud, die die Verwaltung von Anwendungen, Knoten und Schwarmclustern bereitstellen, werden am 21. Mai [2020] heruntergefahren. Automatisierte Builds und Registrierungsspeicherdienste sind nicht betroffen und weiterhin verfügbar

Yamenk
quelle
Alles gut, was das Letzte betrifft: "Mit Docker Cloud können Sie Container ausführen." Was können Sie praktisch tun, wenn Sie diese Container in der Cloud ausführen? Können sie öffentlich zugängliche Endpunkte bereitstellen? Ist eine Docker-Cloud im Wesentlichen so etwas wie AWS, aber für Docker-Container? (oder ist es nur eine Containerbibliothek zur Entdeckung)
George Katsanos
2
Ok, tut mir Leid. Ich glaube ich bin immer noch verwirrt. Bedeutet das also, dass Docker-Compose insofern wie Kubernetes ist, als es zum lokalen Orchestrieren von Containern verwendet wird und für die lokale Entwicklung bequemer ist, oder ist Kubernetes viel mehr als dies?
Vipin Menon
6
Ist es fair, die folgende Analogie zu ziehen: Docker-Compose <> Minikube 2. Docker-Schwarm <> Kubernetes-Cluster 3. Docker-Cloud <> verwalteter Kubernetes-Cluster von GCP, AWS usw.
Anoop
1
"Docker Swarm dient zum Ausführen und Verbinden von Containern auf mehreren Hosts." : Was bedeutet hier "Verbinden"? Netzwerkverbindung?
jemand_ Smiley
1
@someone_smiley Ja. Es wird ein Overlay-Netzwerk erstellt
OneCricketeer
134

Neben @ yamenk's Antwort möchte ich hier einige Details hinzufügen, die den Menschen auf ihrem Weg zum Verständnis von Kubernetes helfen könnten.

Kurze Antwort:

  • docker-compose: ist ein Tool , das eine YAML-Datei verwendet, die Ihre Multi-Container- Anwendung beschreibt und Ihnen hilft , alle diese Container zu erstellen , zu starten / zu stoppen und zu entfernen , ohne mehrere docker ...Befehle für jeden Container eingeben zu müssen.
  • Kubernetes: ist eine Plattform für die Verwaltung von containerisierten Workloads und Services, die sowohl die deklarative Konfiguration als auch die Automatisierung erleichtert. Was? 🤔 Lesen Sie weiter ...

Docker Compose

(aus den Dokumenten): Compose ist ein Tool zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern. Mit Compose verwenden Sie eine YAML-Datei, um die Dienste Ihrer Anwendung zu konfigurieren. Anschließend erstellen und starten Sie mit einem einzigen Befehl alle Dienste in Ihrer Konfiguration.

Compose verfügt über Befehle zum Verwalten des gesamten Lebenszyklus Ihrer Anwendung:

  • Starten, Beenden und Neuerstellen von Diensten
  • Zeigen Sie den Status der ausgeführten Dienste an
  • Streamen Sie die Protokollausgabe laufender Dienste
  • Führen Sie einen einmaligen Befehl für einen Dienst aus

Kubernetes

(aus Einführung in Kubernetes ): Kubernetes ist ein Container-Orchestrator wie Docker Swarm, Mesos Marathon, Amazon ECS und Hashicorp Nomad . Container-Orchestratoren sind die Tools, mit denen Hosts zu einem Cluster zusammengefasst werden und die uns dabei helfen, Anwendungen sicherzustellen:

  • sind fehlertolerant,
  • kann skaliert werden und dies bei Bedarf tun
  • Ressourcen optimal nutzen
  • kann andere Anwendungen automatisch erkennen und miteinander kommunizieren
  • sind von der Außenwelt zugänglich
  • kann ohne Ausfallzeit aktualisiert / zurückgesetzt werden.

Viele Leute argumentieren, dass Kubernetes schwer zu lernen ist. Das liegt daran, dass es eine Reihe von Problemen löst und die Leute versuchen zu verstehen, ohne alle Voraussetzungen zu kennen. Das macht es kompliziert. Beginnen Sie mit dem Zusammensetzen der Puzzleteile, indem Sie über Konzepte / Begriffe wie die folgenden lesen. Dieser Prozess hilft Ihnen zu verstehen, welche Probleme Kubernetes zu lösen versucht:

  • 12-Faktor-Apps,
  • Automatisches Binpacking,
  • Selbstheilungsmechanismen,
  • Horizontale Skalierung,
  • Serviceerkennung und Lastausgleich,
  • Automatisierte Rollouts und Rollbacks,
  • Blaugrüne Bereitstellungen / Kanarische Bereitstellungen
  • Geheimnisse und Konfigurationsmanagement,
  • Speicher-Orchestrierung

Und da Container und deren Verwaltung viele verschiedene Aspekte aufweisen, sollten Sie die Cloud Native-Landschaft im Auge behalten:

Interaktive Version hier: Landschaft.cncf.io/

Geben Sie hier die Bildbeschreibung ein

Aktualisierung

Mai 2020: Docker Compose Specification ist jetzt ein offener Standard

In Zusammenarbeit mit AWS, Microsoft und anderen Mitgliedern der Open Source-Community haben wir die Compose-Spezifikation erweitert, um Cloud-native Plattformen wie Kubernetes und Amazon ECS zusätzlich zu den vorhandenen Compose-Plattformen zu unterstützen. Mehr hier: blog / compose-spec.io

tgogos
quelle
Diese Antwort ist veraltet. docker.com/blog/…
OneCricketeer
1
Danke @ Cricket_007 Ich werde das im Auge behalten, aber ich denke, dieser Blog-Beitrag von 2018 ist eine Art ... "Marketing". Es ist 2020 und wenn Sie die Dokumente unter Docker Compose und Compose File Version 3 überprüfen, gibt es nichts über Kubernetes.
Tgogos
Damit? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
Oh, erstaunlich, dass es eine Compose-Ebene gibt, die die gesamte Kubernetes-Syntax abstrahiert! Danke @ Cricket_007.
George Katsanos
27

Wenn Sie Netzwerkcontainer mit demselben Host verwenden, wählen Sie Docker Compose .

Wenn Sie Container auf mehreren Hosts vernetzen, entscheiden Sie sich für Kubernetes .

Aniket Alhat
quelle
2
Das ist die Art von Antwort, die ich erwartet hatte! Auch wenn es eine weitere Erklärung geben könnte, ist der Teil "tl; dr" wirklich der Punkt. Keine der anderen Antworten sagt das wirklich!
Der Pate
8

Die erste Unterscheidung besteht zwischen der Container-Engine und dem Container-Orchestrator.

docker ist eine Container-Engine, mit der Sie in der Regel höchstens einen Container lokal auf Ihrem PC für Entwicklungszwecke erstellen und ausführen können.

docker-compose ist ein Docker-Dienstprogramm, mit dem mehrere Container ausgeführt und über die Docker-Engine-Funktionen Volumes und Netzwerke gemeinsam genutzt werden können. Es wird lokal ausgeführt, um die Dienstzusammensetzung zu emulieren, und remote auf Clustern.

Kubernetes ist eine Container-Orchestrierungsplattform, die sich um die Ausführung von Containern und die Verbesserung der Engine-Funktionen kümmert, sodass Container für komplexe Anwendungen (Art von PaaS, die von Ihnen oder dem Cloud-Anbieter verwaltet werden) zusammengestellt und skaliert werden können. Die Hauptfunktion von Kubernetes besteht darin, die Infrastruktur mithilfe von Containern von der Anwendung zu entkoppeln. Sie ist auch für andere Engines offen, die Docker beispielsweise zum Ausführen von Containern mit rkt oder cri-o verwenden kann.

Docker Cloud ist auch ein PaaS-Angebot, mit dem Sie Container über die dockerEngine-API ausführen und orchestrieren können .

Abhängig von Ihren Anforderungen, der Kontrolle über die Infrastruktur und die Zielgruppe können Sie jetzt entweder Kubernetes auf Baremetal oder Azure ACS oder Google GKE usw. verwenden.

Hoffe das hat geholfen :) Grüße

Francesco Gualazzi
quelle
1
Ich bin ein bisschen verwirrt, warum Sie normalerweise nur einen Container auf Docker ausführen? Ich denke, Docker-Compose ist eine bessere Lösung, aber nichts hindert Sie daran, mehrere Container ohne sie zu starten!
Peter
oh ja, manchmal läuft eine MySQL im Hintergrund und startet dann httpd und nginx als eigenständige Container ... aber wenn ich das Ganze automatisieren möchte, erstelle ich definitiv eine docker-compose.yml, um Abhängigkeiten, Netzwerke usw. anzugeben. ..
Francesco Gualazzi
6

Docker Compose ist kein produktionsfertiges Tool. Es funktioniert hervorragend für PoC- oder Entwicklungsumgebungen, es fehlen jedoch viele der Funktionen, die mehr oder weniger für den ernsthaften Einsatz in der Produktion erforderlich sind. Swarm ist produktionsbereiter, aber ich würde niemals in Swarm in einem Greenfield-Szenario investieren. Kubernetes hat den Orchestrierungskampf gewonnen, wie die Aufnahme in Docker Desktop zeigt und von allen großen Cloud-Anbietern angeboten wird. Kubernetes ist viel leistungsfähiger und bietet weitaus mehr Community- und Unternehmensunterstützung.

Ich würde empfehlen, in einige der Kubernetes-Tutorials von Pluralsight, Linux Academy usw. einzutauchen und einen Cluster zu erstellen, mit dem Sie in der Cloud-Plattform Ihrer Wahl (EKS, AKS, GKE usw.) herumspielen können. Wenn Sie versuchen, sich mit Bare Metal zu beschäftigen, schauen Sie sich OpenShift an, aber erkennen Sie, dass Sie in diesem Setup etwas von der Magie von Kubernetes verlieren.

Ashok Reddy
quelle
Einverstanden, dass k8s (vorerst) "gewonnen" hat. Aber Mesos wurde früher als Goldstandard für Produktionscluster bezeichnet . DC / OS hat die Unternehmensfunktionen hervorragend herausgebracht, aber jetzt können Sie sogar mehrere k8s-Cluster in einer Mesos-Umgebung ausführen und von einer einzigen herstellerunabhängigen Plattform auf sie zugreifen. Was ist also wirklich besser?
OneCricketeer
3

Docker Compose:

In einer docker-compose.ymlDatei kann jeder Eintrag optional docker-composeein Bild erstellen. Jeder Eintrag kann einen einzelnen Container darstellen, den wir erstellen möchten, und jeder Eintrag definiert die Netzwerkanforderungen oder Ports.

Kubernetes:

Kubernetes erwartet, dass alle Images bereits erstellt wurden und es eine Konfigurationsdatei pro Objekt gibt, die wir erstellen möchten, und wir müssen alle Netzwerke manuell einrichten.

Wir stellen also sicher, dass unser Image auf Docker Hub gehostet wird, erstellen eine Konfigurationsdatei zum Erstellen des Containers und eine Konfigurationsdatei zum Einrichten des Netzwerks.

Daniel
quelle
1

Docker-Compose ist eine Bereitstellungsdatei, die einen oder mehrere Container mit ihrer Umgebung vordefiniert, z. B. Volumes, Netzwerk, einen auszuführenden Befehl usw.

Kubernetes hingegen ist ein System, das Docker-Container und andere Mikrodienste mithilfe von koordiniert und über mehrere Knoten hinweg skaliert und zuverlässig macht

Yaniv Hakim
quelle
1

Docker compose: Docker-Container können direkt ohne Unterstützung einer beliebigen Yaml-Datei ausgeführt werden. Mit Hilfe von Docker Compose Tool können Containereigenschaften jedoch in einer Datei namens docker-compose.yml definiert werden. Weitere Informationen finden Sie in der folgenden Beispiel-Yml-Datei.

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

Name des Bildes, Anzahl der Replikate usw. können über die XML-Datei konfiguriert werden.

Kubernetes: Dies ist eine Containerverwaltungsplattform, die auf Docker von Google ausgeführt wird. Docker Swam ist eine weitere Containerverwaltungsplattform, die von Docker selbst erstellt wurde. Kubernetes bietet auch die Möglichkeit, Konfigurationen für Pods (entsprechend dem Container im Docker) in einer Yaml-Datei wie Docker Compose zu speichern. Beispiel Yaml-Datei

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

Hier können auch Bilder, zu öffnende Ports und Pod-Host-Port-Zuordnungen usw. angegeben werden. kubectl apply -f ist wie docker compose der Befehl zum Ausführen dieser Datei.

Nalin Kularathna
quelle
Also, was ist der Unterschied? =)
Der Pate
Docker Compose ist eine Konsole zum Ausführen von Docker-Images, und Kubernetes ist kein Container-Orchestrierungssystem. Diese beiden sind also nicht vergleichbar und völlig unterschiedlich. aber kubernetes hat kubectl es ist auch eine konsole und ähnlich dem docker komponieren
nalin kularathna