Chef vs Docker: Was sind die Unterschiede?
Eines der Dinge, die Systemadministratoren und DevOps lange Zeit als notwendiges Übel angesehen haben, ist der Zeitaufwand, der damit verschwendet wird, Däumchen zu drehen, während man auf die Erstellung eines neuen Servers wartet. Mit dem Aufkommen von Virtualisierung und Cloud Computing und dem daraus resultierenden massiven Anstieg des Rechenbedarfs hat auch die Häufigkeit der Erstellung neuer Server nur noch zugenommen.
Hier kommen Tools wie Docker und Chef ins Spiel. Kurz gesagt, beide machen es viel einfacher, Änderungen auf Maschinenebene in einer Umgebung mit mehreren Servern schnell zu definieren und einzuführen. Aber die Wege, die sie nehmen, um an den Ort dieses heiligen Grals zu gelangen, sind in der Tat sehr unterschiedlich, wie wir jetzt sehen werden.
Was sie sind
Docker begann als Open-Source-Nebenprojekt namens dotCloud. Aber als seine Schöpfer sein Potenzial erkannten, wurde es schnell zu einer Top-Priorität. Es handelt sich um ein reines Linux-Tool, das in der Sprache Go entwickelt wurde und auf LinuX Containers (LxC) aufbaut, um virtuelle Umgebungen (VEs) zu erstellen. Jetzt aufgepasst, Kinder, denn ein VE unterscheidet sich radikal von einer virtuellen Maschine (VM). Eine VM wird von einem Virtualisierungstool oder Emulator (HyperV, VMWare usw.) erstellt und ist ein vollständiges Image eines Quellcomputers, einschließlich des Betriebssystems, der Festplattenkonfiguration, des Netzwerks und sogar der virtuellen Prozessoren. Die daraus resultierende aufgeblähte Masse verbraucht ziemlich viel Speicherplatz und lässt sich nur langsam bereitstellen und starten.
Docker löst dieses Problem, indem es das Betriebssystem vom Kernel isoliert. Anschließend wird ein 'level-zero'-Paket aus der Kernel-Machine-Baseline erstellt. Alle nachfolgenden Änderungen werden als Snapshots erfasst, die als Namespaces bezeichnet werden, und können in eigenständigen Containern als virtuelle Systeme ausgeführt werden. Snapshots erfassen nur die Änderungen aus der "Basisvorlage", nicht das vollständige Maschinen-Setup (im Gegensatz zu VMs). Ab diesem Zeitpunkt werden Namespaces gespeichert und können eigenständig installiert werden, um vollständige Umgebungen auf jedem Docker-fähigen Host zu erstellen.
Chef ist ein CM-Tool. Zusammen mit Puppet sind sie die großen Jungs des CM-Marktplatzes. Es wurde erstmals 2009 veröffentlicht und hilft Administratoren und DevOps-Experten bei der Verwaltung ihrer Umgebungen, indem es die Einführung von Änderungen und sogar die Bereitstellung neuer Computer erleichtert. Chef unterstützt sowohl Windows als auch Linux und Unix vollständig und verfügt auch über eine richtige GUI (wenn auch immer noch nicht so glatt wie die von Puppet). Es gibt jedoch Beschwerden, dass Chef für Neulinge ein Durcheinander ist, und die Dokumentation ist nicht leicht zu verstehen, insbesondere für Neulinge.
Wie sie funktionieren
Docker erstellt keinen eigenen virtuellen Computer mit einem eigenen Betriebssystem, Prozessoren und Hardwareemulation. Ein VE ist eine Lite-VM. Es basiert auf dem bereits vorhandenen Kernel-Image der zugrunde liegenden Hardware und erstellt nur einen "Container", in dem Ihre Apps ausgeführt werden. Es kann sogar das Betriebssystem neu erstellen, da das Betriebssystem nur eine weitere App ist, die auf dem Kernel ausgeführt wird. Stellen Sie sich Docker als eine turbogeladene Version von LxC vor. Es bietet die folgenden zusätzlichen Funktionen, die LxC nicht bietet:
- Portable Bereitstellung auf mehreren Computern: Sie können Docker verwenden, um ein einzelnes Objekt zu erstellen, das alle Ihre gebündelten Anwendungen enthält. Dieses Objekt kann dann übertragen und schnell auf einem anderen Docker-fähigen Linux-Host installiert werden.
- Versionierung: Docker enthält Git-ähnliche Funktionen zum Nachverfolgen aufeinanderfolgender Versionen eines Containers, zum Überprüfen des Unterschieds zwischen Versionen, zum Commit neuer Versionen, zum Zurücksetzen usw.
- Wiederverwendung von Komponenten: Docker ermöglicht das Erstellen oder Stapeln von bereits erstellten Paketen. Wenn Sie beispielsweise mehrere Maschinen erstellen müssen, die alle eine Apache- und MySQL-Datenbank benötigen, können Sie ein "Basisimage" erstellen, das diese beiden Elemente enthält, und dann neue Maschinen mit diesen bereits installierten Maschinen erstellen und erstellen.
- Shared Libraries: Es gibt bereits eine öffentliche Registry (https://hub.docker.com/), in der bereits Tausende die von ihnen erstellten nützlichen Container hochgeladen haben. Denken Sie auch hier an den gemeinsamen AWS-Pool mit verschiedenen Konfigurationen und Distributionen - dieser ist sehr ähnlich.
Eine vollständige Liste der Funktionen von Docker finden Sie unter diesem Link.
Chef verwendet ein Master-Agent-Setup, bei dem ein zentraler Master-Server eine Reihe von Agenten, die auf allen anderen Client-Knoten installiert sind, koordiniert und Anweisungen an diese sendet. Die Agenten können sogar von der Client-Seite aus mit dem Tool "knife" und SSH für eine einfache Bereitstellung installiert werden. All dies wird entweder von einer GUI oder einer CLI verwaltet, die Basis-Ruby als DSL verwendet. Die GUI ist nützlich, aber für die meisten fortgeschrittenen Aufgaben wird es unvermeidlich sein, dass man Ruby lernen muss. Chef und andere CM-Tools verwenden ein Infrastructure-as-Code-Modell - um effektiv zu arbeiten, müssen alle zu verwaltenden Infrastrukturknoten rein im Code ausdrückbar sein, in diesem Fall Ruby. Sie definieren die gewünschten Änderungen und die Teilmenge der Computer, auf die diese Änderungen angewendet werden sollen, und der Chef-Server erledigt den Rest. Wenn Sie z. B. alle Windows 2008-Server mit dem .Net 2.0-Framework auf .Net 3.0 aktualisieren müssen, definieren Sie dies auf dem Chef-Server, und es wird eingeführt. Ein Nachteil allerdings: Die Implementierung von "Push" vom Master zu den Agenten durch Chef ist immer noch unterdurchschnittlich. Die Crowdsourcing-Empfehlung lautet, dass Sie Ihre Agenten stattdessen so konfigurieren, dass sie regelmäßig nach Hause telefonieren, um zu überprüfen, ob der Master Änderungen für sie hat, die sie auf ihren Computern bereitstellen können. Unnötig zu erwähnen, dass dies ein großer ärgerlicher Nachteil ist, an dessen Behebung die Schöpfer von Chef arbeiten.
Chef-Konfigurationen werden in JSON-Dateien verpackt, die als "Rezeptbücher" bezeichnet werden, und die Software kann entweder in einem Client-Server-Modus namens Chef-Server oder im eigenständigen Modus namens "Chef-solo" ausgeführt werden. Ein Teil der Anziehungskraft von Chef besteht darin, dass eine große Anzahl von Kochbüchern erstellt und frei im Internet geteilt wurde.
Schlussfolgerung
Was ist also das Beste, Docker oder Chef? Wie bei so vielen komplexen Entscheidungen lautet die Antwort: "Es kommt darauf an. " Das hängt davon ab, was Sie erreichen möchten und wie viel Vertrauen Sie in das Tool haben - Chef ist erprobt und getestet, während Docker noch sehr neu ist und selbst seine Entwickler zögern, es für Produktionsumgebungen zu empfehlen. Tatsächlich können sich Docker und Chef sogar ergänzen; Docker wird für die schnelle Bereitstellung neuer Server verwendet, und Chef wird für das Rollout kleiner, detaillierter Änderungen an vorhandenen Computern verwendet, eine Aufgabe, für die Docker möglicherweise ungeeignet ist. Alternativ wäre Docker ideal in einem Setup, das hauptsächlich die Erstellung neuer schreibgeschützter Serverinstanzen erfordert, bei denen die Änderung aus einem komplett neuen Server besteht.
Referenzen
https://phunehehe.net/docker-vs-chef-vagrant/
https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine
https://groups.google.com/forum/#!topic/docker-user/NF86nnPMZ6k