Vagrant, Docker, Marionette, Koch

9

Ich verstehe nicht einmal den grundlegenden Unterschied zwischen den Diensten im Titel. Stellen diese Dienste lediglich Software bereit, mit der Sie Ihre VMs konfigurieren / organisieren / verwalten können, oder stellen sie auch eine physische Infrastruktur bereit, auf der Ihre VMs ausgeführt werden können? Mit anderen Worten, sind das nur bequeme Schnittstellen zwischen Entwicklern und AWS, Rackspace und Azure?

    
Joseph Johnston 04.01.2017, 19:30
quelle

3 Antworten

22

Nicht genau.

Chef / Puppet sind die gleichen, sie sind Konfigurationsmanagement. Sie können zwar virtuelle Maschinen oder öffentliche / private Clouds verwalten, aber die meisten Benutzer neigen nicht dazu, sie so zu verwenden. Sie sind Konfigurationsmanagement. Sie kommen normalerweise ins Spiel, nachdem eine virtuelle Maschine gestartet wurde, um sie in einen gewünschten Zustand zu versetzen. Das heißt, welche Software auf der virtuellen Maschine benötigt wird, welche Benutzer hinzugefügt werden müssen, welche Konfiguration benötigt wird, usw. Daher wird sie tendenziell zur Skalierung der Infrastruktur verwendet.

Vagrant kann zwar auch zur Verwaltung virtueller Maschinen und öffentlicher / privater Clouds verwendet werden, wird jedoch normalerweise nur für einmalige Umgebungen verwendet. Es bietet eine zusammenhängende Datei zum Erstellen einer virtuellen Maschine. Es ist ähnlich wie Koch / Marionette, wird aber nicht im Maßstab verwendet.

Docker ist ein separates Biest. Es besteht aus mehreren Komponenten, wird aber hauptsächlich für die "Bündelung" (Hinweis: es ist viel mehr als das, aber das ist eine ELI5-Antwort) -Software verwendet und erfordert ein Host-System (oder eine Infrastruktur), auf dem es laufen kann. Es fügt den Anwendungen ein wenig Sicherheit hinzu, bietet jedoch meist ein einheitliches "Betriebssystem" für die Ausführung einer Anwendung.

In der Praxis können alle diese in einer Umgebung verwendet werden. Hier ist ein Beispiel:

Angenommen, Sie haben die Anwendung FunTime. Sie haben acht Entwickler, die dazu beitragen, und FunTime soll auf einer skalierbaren Infrastruktur auf AWS ausgeführt werden. Es hat ein Front-End (FunTime-Front) und ein Back-End (FunTime-API) und benötigt Postgres. 4 Entwickler arbeiten am Frontend, vier Entwickler arbeiten am Backend.

Ich würde Folgendes tun (es gibt viele Möglichkeiten, diese Katze zu häuten, aber dies ist ein Beispiel):

Ich würde Docker für FunTime-Front und FunTime-API verwenden. Ich würde Vagrant verwenden, um eine Entwicklungsumgebung für die Entwickler einzurichten (damit sie verschiedene Komponenten optimieren können). Vagrant würde: die VM lokal (bei Bedarf in einer Cloud) starten, Docker installieren, die Docker-Images für FunTime-Front und FunTime-API herunterziehen, Postgres installieren und Postgres mit Dummy-Daten bestücken, Netzwerk-Ports für die verschiedenen konfigurieren Komponenten.

Jetzt hat der Entwickler den vollen FunTime-Stack auf seinem lokalen Rechner und muss sich nicht darum kümmern, selbst etwas zu konfigurieren: er kann einfach "vagrant up" eingeben.

Auf der Infrastrukturseite würde ich Koch (oder Puppe) verwenden, um die Umgebungen zu konfigurieren: Produktion, Bühne und Entwicklung (oder was auch immer benötigt wird), dann würde Chef Docker auf den "Anwendungs" -Servern, "Postgres" auf den Postgres-Servern installieren, Sicherheitseinstellungen anwenden usw. Auf diese Weise sind alle zugehörigen Server gleich. Wenn ich einen Server aktualisieren oder einen Patch hinzufügen müsste, wäre das mit der Konfigurationsverwaltung trivial.

In allen Fällen wird Docker verwendet, so dass zwischen den verschiedenen Umgebungen, einschließlich der Entwickler-Workstation, kein Unterschied besteht.

Dies würde sicherstellen, dass Sie nicht die Ausrede hören "Nun, es funktioniert auf meinem lokalen Rechner!" sehr oft. Wenn es eine verpfuschte Bereitstellung gibt, wäre das Zurückrollen der Anwendung bei Docker SEHR einfach.

Ich hoffe, das gibt ein wenig mehr Einblick in die Art und Weise, wie sie verwendet werden könnten.

    
Nick Burke 04.01.2017, 19:59
quelle
2

Ich werde versuchen, wie im täglichen Gespräch zu pitchen,

Vagrant - Entwickeln von Entwicklungsumgebungen auf einem neuen Entwicklungscomputer im selben Projekt, idealerweise innerhalb weniger Minuten. Wird in der Regel oben auf der virtualbox verwendet, kann aber mit verschiedenen Maschinenanbietern verwendet werden.

Docker - Nichts virtuelles hier, stellen Sie sich einfach einen echten Prozess vor und die erforderlichen Bibliotheken werden in einem Sandkasten gespeichert und dann als Archiv an den Server gesendet. Die Ressourcennutzung wird nach dem Ausführungsbefehl festgelegt.

Chef / Puppet - Kann verwendet werden, um alles, was Sie in bash eingeben, zu automatisieren, um Ihr Projekt einzurichten (außer Anwendungstasten usw.). Sie können sie verwenden, um Docker-Images oder vagrante Umgebungen zu erstellen, sodass sie nicht unbedingt auf dem physischen Produktionsserver vorhanden sein müssen. Siehe Packer .

AWS / Rackspace / Azure - sind IaaS-Anbieter. In einfachem Englisch, Spin-up-Server wie Sie verlangen und Ihnen den SSH-Zugriff geben. Natürlich bieten sie mehr als das.

Rate mal, sie können ineinander benutzt werden.

Diese Tools scheinen die Bereitstellung zu erleichtern, aber als Faustregel sollten Sie sie nicht alle zusammen verwenden, um Zeit für Sie und Ihr Team zu sparen. Manchmal ist es viel einfacher, einen EC2 per Hand hochzufahren und scp Ihr Projekt mit manueller Konfiguration. Sie können später automatisieren.

  

Vorzeitige Optimierung ist die Wurzel allen Übels   - Sir Tony Hoare

    
hurturk 21.02.2017 03:01
quelle
1

Chef : Chef ist eine Automatisierungsplattform, die Ihre Infrastruktur in Code umwandelt. Es wird allgemein als Configuration Management Software bezeichnet. Sie können den Status mit verschiedenen Parametern wie Konfigurationsdateien, s / w, Tools, Zugriffstypen und Ressourcentypen usw. definieren. Außerdem können Sie je nach Bedarf verschiedene Maschinen mit unterschiedlichen Funktionen konfigurieren.

Puppet : Puppet ist ein Tool, mit dem Sie bestimmte Konzepte der Zielmaschine abstrahieren und den Konfigurationsprozess betriebssystemunabhängiger gestalten können. Es ermöglicht, ein Paket zu installieren oder einen Hintergrunddienst beim Start unabhängig auszuführen. Definieren Sie einen Befehl, Pakete, die installiert werden müssen, Schrittabhängigkeiten, Dateiinhalte und andere Dinge, die Sie benötigen, um die Maschine ohne Probleme in Betrieb zu nehmen.

Vagrant : Vagrant ist ein Projekt, das beim Erstellen virtueller Maschinen hilft. Es begann als eine Befehlszeile von VirtualBox, etwas ähnlich wie Gemfile für VMs. Sie können das Basis-Image auswählen, mit dem Sie beginnen möchten, Netzwerk, IP, Ordner freigeben und alles in eine Datei einfügen, die jeder wiederverwenden kann, um denselben konfigurierten Computer zu erstellen. Vagrant hat verschiedene Erweiterungen, Bereitstellungsoptionen und VM-Provider. Sie können eine VirtualBox, VMware, ausführen und sie ist erweiterbar genug, um Instanzen auf EC2 erstellen zu können.

Docker : Docker ermöglicht es, eine Anwendung mit all ihren Abhängigkeiten in eine standardisierte Einheit der Softwareentwicklung zu packen. Es reduziert also die Reibung zwischen Entwickler, QS und Test. Sie ändert Ihre Anwendung dynamisch, fügt jeden Tag neue Funktionen hinzu und verteilt Services, um die Problembereiche schnell zu ändern. Docker stellt sich als Schnittstelle zu PaaS in einen aufgeregten Ort: Networking, Discovery und Service Discovery mit Anwendungen, die sich nicht um die zugrunde liegende Infrastruktur kümmern müssen. Ja, sie haben immer noch Probleme mit Docker in der Produktion (dachte alle großen Unternehmen migrierten bereits ihre Infrastruktur zu Docker), aber hoffentlich werden wir die Lösungen für diese Probleme sehen, wie Docker Team und Mitwirkende hart an diesen Problemen arbeiten. Als Docker Volume-Treiber können Container-Datenverwaltungslösungen von Drittanbietern Datenvolumes für Container bereitstellen, die mit Daten wie Datenbanken, Schlüssel / Wert-Speichern und anderen Stateful-Anwendungen arbeiten. Wie Sie sehen, rexray, als Volume-Plugin und bietet erweiterte Speicherfunktionalität. emccode / rexray Endlich haben wir uns auf mehr als nur Bilder und Runtime geeinigt.

    
mohan08p 07.12.2017 17:08
quelle

Tags und Links