Vagrant vs. Docker: Was ist das Richtige für Sie? (könnte beides sein)

Veröffentlicht: 2023-01-26

DevOps-Teams stehen unter zunehmendem Druck, Kunden schnell mehr Funktionalität bereitzustellen. Cloud-Anbieter bieten eine Lösung durch skalierbare Plattformen mit hervorragenden CLI- und API-Integrationen. Leider können die von Cloud-Anbietern bereitgestellten Schnittstellen inkompatibel sein. Einige Cloud-native Tools helfen DevOps-Teams jedoch dabei, benutzerdefinierte Lösungen für jeden Cloud-Anbieter zu entwickeln.

Zwei dieser Tools sind Vagrant und Docker. Zu verstehen, was sie tun und wie sie zusammenarbeiten, ist der Schlüssel, um das Beste aus Ihrer Cloud-Umgebung herauszuholen.

Vagrant ist ein Tool zum Erstellen und Verwalten von Umgebungen mit virtuellen Maschinen (VM) in einem einzigen Arbeitsablauf. Unabhängig davon, ob Sie lokale VMs für die Ausführung mit Hypervisoren oder nur Cloud-VMs erstellen, Vagrant bietet ein konsistentes Konfigurationsformat, eine einzelne CLI und gemeinsam genutzte Bereitstellungsprogramme, um Software zu installieren und Konfigurationen zu ändern.

Docker bietet die Möglichkeit, Software und unterstützende Konfigurationen in Images zu packen, die konsistent auf mehreren Plattformen ausgeführt werden. Docker gibt DevOps-Teams die Gewissheit, dass Software auf einer lokalen Workstation genauso ausgeführt wird wie auf einer verwalteten Cloud-Plattform.

Obwohl Vagrant und Docker das gemeinsame Ziel haben, wiederholbare Umgebungen zu erstellen, tun sie dies auf unterschiedliche, aber komplementäre Weise. In diesem Artikel wird untersucht, wie Vagrant und Docker ihre Ziele erreichen.

Was ist Docker?

Docker ist eine offene Plattform zum Entwickeln, Versenden und Ausführen von Anwendungen. Es ermöglicht DevOps-Teams, benutzerdefinierte Software, unterstützende Anwendungen und Bibliotheken sowie Anweisungen für die Konfiguration, das Netzwerk, das Einhängen von Dateien, Zustandsprüfungen und das Starten von Skripts in ein eigenständiges Artefakt namens Image zu packen.

Bilder werden dann in einer einfachen, isolierten Umgebung namens Container ausgeführt. Im Gegensatz zu VMs, die normalerweise feste Mengen an Arbeitsspeicher reservieren und die CPU-Auslastung streng begrenzen, sind Container viel elastischer und verbrauchen nur den Arbeitsspeicher und die CPU, die sie benötigen.

Dadurch können viele Container effizient nebeneinander betrieben werden, was die Kosten senkt und die Skalierung erhöht. Container gelten jedoch nicht als so sicher wie VMs, was bedeutet, dass Container keine ideale Lösung zum Ausführen von nicht vertrauenswürdigem Code sind.

Screenshot: Docker-Website – Vagrant vs. Docker.
Docker

Warum Docker verwenden (vs. Vagrant)?

DevOps-Teams verwenden in der Regel Docker zum Bereitstellen und Ausführen von Webanwendungen, einschließlich Cloud-nativer Anwendungen, die entweder in Nachrichtenwarteschlangen integriert sind oder auf Function-as-a-Service-Plattformen (FaaS) gehostet werden, die auf Cloud-basierte Auslöser und Ereignisse reagieren.

Plattformen wie Kubernetes bauen auf Docker auf und ermöglichen die skalierbare Orchestrierung von Containern. Darüber hinaus unterstützt jeder Cloud-Anbieter die Möglichkeit, Docker-Container in seinen PaaS-Angeboten (Platform as a Service) auszuführen. Es ist jetzt selten, eine PaaS zu finden, die Docker nicht unterstützt.

Docker kann auch CLI-basierte Tools verteilen und ausführen, wobei alle gängigen Cloud-nativen Tools Docker-Images anbieten, die ihre CLI einbetten.

Docker? Landstreicher? Sie sind sich nicht sicher, welches das richtige Tool zum Erstellen Ihrer individuellen Lösungen ist? Erfahren Sie hier mehr: Klicken Sie hier, um zu twittern

Was sind die Vorteile von Docker?

Docker löst ein häufiges Problem herkömmlicher Softwarebereitstellungsprozesse, bei denen benutzerdefinierte Anwendungen unterschiedliche Ergebnisse zeigen könnten, wenn sie auf der lokalen Arbeitsstation eines Entwicklers und in einer Produktionsumgebung ausgeführt werden. Diese Unterschiede sind oft das Ergebnis von Entwicklern, die unterschiedliche Versionen von Programmiersprachen ausführen, unterschiedliche Konfigurationen zur Unterstützung von Anwendungen wie Webservern haben oder völlig andere Betriebssysteme als die Produktionsumgebung ausführen. Diese Unterschiede führen dazu, dass Supportprobleme mit Kommentaren wie „Auf meinem Computer funktioniert es“ zwischen den Teams hin und her gehen.

Da Docker-Images den Code für benutzerdefinierte Anwendungen, alle unterstützenden Anwendungen und Bibliotheken enthalten, werden die Images in Containern ausgeführt, die konsistentere Ergebnisse liefern, unabhängig davon, wo sie ausgeführt werden.

Docker-Images lassen sich mithilfe von Registrierungen wie Docker Hub einfach verteilen, sodass DevOps-Teams Images schnell untereinander austauschen und die Images über die verschiedenen Hosting-Plattformen bereitstellen können. Zum Beispiel findest du Docker hinter Kinstas DevKinsta WordPress-Entwicklungssuite.

Wenn komplexere Anwendungsstapel erforderlich sind, wie z. B. die Bereitstellung einer Datenbank zusammen mit einer Backend-Anwendung oder einer Sammlung verwandter Microservices, bietet Docker Compose die Möglichkeit, mehrere Docker-Container mit einem einzigen Befehl zu erstellen und zu verknüpfen. Alle Container, zugehörigen Einstellungen und Netzwerkkonfigurationen werden in einer einzigen YAML-Datei definiert. Docker Compose liest dann diese Datei, um mehrere Container als eine Einheit zu erstellen und zu verwalten.

Docker wird auch von den großen Cloud-Anbietern nahezu universell unterstützt, was bedeutet, dass DevOps-Teams die Qual der Wahl haben, wenn sie ihre Docker-Images in der Cloud ausführen.

Was ist Vagrant?

Seit Jahrzehnten haben sich VMs als zuverlässige und sichere Lösung für die Partitionierung und Bereitstellung von Rechenressourcen erwiesen. VMs bleiben die beliebtesten Dienste von Cloud-Anbietern, und viele kommerzielle und Open-Source-Lösungen für Teams möchten VMs lokal ausführen.

Diese Vielfalt stellt DevOps-Teams jedoch vor eine Herausforderung. Jede Lösung stellt eine andere CLI und API zum Erstellen und Verwalten von VMs bereit, was es schwierig macht, die Konsistenz zwischen lokalen Entwicklungsumgebungen und Cloud-basierten Plattformen aufrechtzuerhalten.

Vagrant bietet eine Lösung, indem es die zugrunde liegenden Unterschiede zwischen VM-Plattformen abstrahiert und es DevOps-Teams ermöglicht, neue VMs mit einer einzigen CLI und konsistenter Konfigurationssyntax bereitzustellen. Teams, die Vagrant einführen, können konsistente VMs erstellen, unabhängig davon, ob sie lokal oder in einer Cloud-Umgebung ausgeführt werden, und können problemlos zwischen Umgebungen wechseln. Vagrant hat eine Vielzahl unterschiedlicher Verwendungszwecke, einschließlich als MAMP-Ersatz (macOS, Apache, MySQL/MariaDB und PHP, Perl oder Python).

Screenshot: Vagrant-Website – Vagrant vs. Docker.
Landstreicher

Warum Vagrant (im Vergleich zu Docker) verwenden?

Es ist möglich, eine VM zu booten und das Betriebssystem manuell zu konfigurieren, indem Software manuell installiert und Konfigurationsdateien bearbeitet werden. Dies ist nicht ideal, da der Prozess nicht wiederholbar ist, was bedeutet, dass VMs für verschiedene Betriebssysteme und Anbieter manuell neu erstellt werden müssen. Es macht es auch nahezu unmöglich, zu einem späteren Zeitpunkt nachzuvollziehen, wie eine VM konfiguriert wurde.

Eine bessere Vorgehensweise besteht darin, den Prozess zu automatisieren, der zum Konfigurieren einer virtuellen Maschine erforderlich ist. Vagrant bietet ein einziges Tool zur Automatisierung des Prozesses zum Erstellen von VMs für viele Anbieter. Vagrant bietet auch eine große Auswahl an hochwertigen VMs auf Vagrant Cloud, die DevOps-Teams verwenden können, um ihre eigenen VMs zu starten.

Was sind die Vorteile von Vagrant?

DevOps-Teams, die Vagrant verwenden, haben ein einziges Tool zum Lernen, unabhängig davon, ob sie VMs für lokale Plattformen, Cloud-Plattformen oder beides erstellen. Sie können Vagrant-Konfigurationsdateien einfach optimieren und zu einem späteren Zeitpunkt erneut ausführen oder überprüfen, um zu verstehen, wie eine VM erstellt wurde.

Vagrant ermöglicht es DevOps-Teams auch, in die Cloud oder zwischen Anbietern zu migrieren, ohne den Prozess neu zu gestalten, den sie zum Erstellen von VMs verwenden.

Die von Vagrant erstellten VMs bieten ein hohes Maß an Isolation und nutzen häufig die spezialisierte Virtualisierungsunterstützung, die in moderne CPUs integriert ist. Dies macht VMs und Tools, die sie erstellen, wie Vagrant, zur besten Wahl, wenn Sicherheit und Isolation eine hohe Priorität haben.

Viele Linux-Distributionen wie Ubuntu und Fedora stellen auch offizielle Vagrant-Boxen bereit, auf denen DevOps-Teams aufbauen können. Dies reduziert die Zeit, die zum Erstellen benutzerdefinierter VMs benötigt wird.

Obwohl Docker und Vagrant auf unterschiedliche Weise arbeiten, wussten Sie, dass Sie sie Seite an Seite verwenden können, um Ihre Ziele zu erreichen? Erfahren Sie hier mehr: Klicken Sie hier, um zu twittern

Vagrant vs. Docker: Ein genauerer Blick

Sowohl Vagrant als auch Docker machen DevOps-Teams effizienter, indem sie das Erstellen, Verteilen und Ausführen von Softwareanwendungen automatisieren.

Docker erreicht dieses Ziel mit einem benutzerdefinierten Verpackungsformat in Form von Bildern und einer leichtgewichtigen Ausführungsumgebung über Container. Container werden konsistent zwischen Plattformen ausgeführt, was DevOps-Teams mehr Vertrauen gibt, dass ihre Software wie erwartet funktioniert. Docker wird von PaaS- und FaaS-Cloud-Plattformen gut unterstützt, sodass DevOps-Teams die beste Plattform für ihre Anforderungen auswählen können.

Viele Container können auf einem einzigen Host nebeneinander existieren, hauptsächlich – aber nicht vollständig – isoliert voneinander, während sie denselben Ressourcenpool teilen. Dadurch können Container effizient skaliert werden.

Vagrant erreicht dieses Ziel, indem es eine konsistente Methode zum Erstellen von VMs mit bestehenden Anbietern bereitstellt. Es ist eine ideale Wahl für Teams, die bereits in VMs investiert haben und sich auf deren hohes Maß an Isolation, Sicherheit, Kontrolle und Anpassung verlassen.

Docker bietet auch die beste Lösung, wenn es darum geht, vertrauenswürdigen Code auszuführen und gleichzeitig die Rechenkosten zu minimieren. Container sind sinnvoll voneinander isoliert, verursachen aber nur sehr wenig Overhead. Das bedeutet, dass viele Container gleichzeitig auf einem gemeinsamen Betriebssystem ausgeführt werden können. VMs bieten die beste Lösung, wenn Teams ein hohes Maß an Isolation und Sicherheit benötigen oder die Möglichkeit benötigen, viele verschiedene Betriebssysteme nebeneinander auszuführen, wobei Vagrant eine praktische Lösung zum automatisierten und wiederholbaren Erstellen von VMs bietet.

Vagrant und Docker schließen sich nicht gegenseitig aus, und beide Tools können nebeneinander verwendet werden. Beispielsweise können DevOps-Teams Docker verwenden, um Anwendungen zu entwickeln und auszuführen, während Vagrant verwendet wird, um spezialisierte Umgebungen neu zu erstellen, um Probleme zu reproduzieren. Docker kann sogar in einer von Vagrant erstellten VM ausgeführt werden, vielleicht um neue Versionen von Docker zu testen oder Tools zu testen, die als Docker-Images in einer isolierten Umgebung verteilt werden.

Zusammenfassung

DevOps-Teams haben beim Erstellen, Verteilen und Ausführen von Anwendungen viele Möglichkeiten.

Docker bietet ein benutzerdefiniertes Image-Format und eine Container-Ausführungsumgebung, die eine groß angelegte und effiziente Ressourcennutzung ermöglicht und auf PaaS- und FaaS-Plattformen unterstützt wird.

VMs bieten sichere und isolierte Ausführungsumgebungen von vielen Cloud- und lokalen VM-Anbietern, wobei Vagrant viele Unterschiede abstrahiert, um eine einzige CLI und konsistente Konfigurationssyntax bereitzustellen, um VMs über Anbieter hinweg zu instanziieren.

Bevor du mit der Entwicklung deiner nächsten App beginnst, wirf einen Blick darauf, wie Kinstas Application Hosting Service Dockerfiles nutzen kann, um die Bereitstellung deines Codes zu verwalten.