DevOps-Teams stehen zunehmend unter dem Druck, ihren Kunden schnell mehr Funktionen zur Verfügung zu stellen. Cloud-Anbieter bieten eine Lösung durch skalierbare Plattformen mit hervorragenden CLI- und API-Integrationen. Leider können die von den Cloud-Anbietern bereitgestellten Schnittstellen inkompatibel sein. Mit einigen Cloud-nativen Tools können DevOps-Teams jedoch maßgeschneiderte Lösungen für jeden Cloud-Anbieter erstellen.

Zwei dieser Tools sind Vagrant und Docker. Um das Beste aus deiner Cloud-Umgebung herauszuholen, ist es wichtig zu verstehen, was sie tun und wie sie zusammenarbeiten.

Vagrant ist ein Tool zum Erstellen und Verwalten von Umgebungen mit virtuellen Maschinen (VM) in einem einzigen Arbeitsablauf. Ganz gleich, ob du lokale VMs für den Betrieb mit Hypervisoren oder nur Cloud-VMs erstellst, Vagrant bietet ein einheitliches Konfigurationsformat, eine einzige CLI und gemeinsame Provisioner für die Installation von Software und die Änderung von Konfigurationen.

Docker bietet die Möglichkeit, Software und unterstützende Konfigurationen in Bilder zu verpacken, die über mehrere Plattformen hinweg konsistent ausgeführt werden können. Mit Docker können DevOps-Teams darauf vertrauen, dass die Software auf einem lokalen Arbeitsplatzrechner genauso läuft wie auf einer verwalteten Cloud-Plattform.

Obwohl Vagrant und Docker das gleiche Ziel verfolgen, nämlich wiederholbare Umgebungen zu schaffen, tun sie dies auf unterschiedliche, aber sich ergänzende Weise. In diesem Artikel erfährst du, wie Vagrant und Docker ihre Ziele erreichen.

Was ist Docker?

Docker ist eine offene Plattform für die Entwicklung, den Versand und den Betrieb von Anwendungen. Sie ermöglicht es DevOps-Teams, benutzerdefinierte Software, unterstützende Anwendungen und Bibliotheken sowie Anweisungen für die Konfiguration, die Vernetzung, das Einhängen von Dateien, Zustandsprüfungen und Startskripte in ein in sich geschlossenes Artefakt, das sogenannte Image, zu packen.

Images werden dann in einer leichtgewichtigen, isolierten Umgebung, einem Container, ausgeführt. Im Gegensatz zu VMs, die in der Regel feste Mengen an Arbeitsspeicher reservieren und die CPU-Nutzung streng begrenzen, sind Container viel flexibler und verbrauchen nur so viel Arbeitsspeicher und CPU, wie sie benötigen.

So können viele Container effizient nebeneinander laufen, was die Kosten senkt und die Skalierbarkeit erhöht. Allerdings gelten Container nicht als so sicher wie VMs, was bedeutet, dass Container nicht die ideale Lösung für die Ausführung von nicht vertrauenswürdigem Code sind.

Docker
Docker

Warum Docker (im Vergleich zu Vagrant)?

DevOps-Teams verwenden Docker in der Regel, um Webanwendungen bereitzustellen und auszuführen. Dazu gehören auch Cloud-native Anwendungen, die entweder in Message Queues integriert sind oder auf Function-as-a-Service-Plattformen (FaaS) gehostet werden und auf Cloud-basierte Trigger und Ereignisse reagieren.

Plattformen wie Kubernetes bauen auf Docker auf und ermöglichen die Orchestrierung von Containern in großem Maßstab. Darüber hinaus unterstützt jeder Cloud-Anbieter die Möglichkeit, Docker-Container in seinen Platform-as-a-Service (PaaS)-Angeboten zu betreiben. Es gibt nur noch wenige PaaS, die Docker nicht unterstützen.

Docker kann auch CLI-basierte Tools verteilen und ausführen. Alle gängigen Cloud-nativen Tools bieten Docker-Images an, in die ihre CLI eingebettet ist.

Was sind die Vorteile von Docker?

Docker löst ein häufiges Problem, mit dem herkömmliche Softwareverteilungsprozesse konfrontiert sind: Benutzerdefinierte Anwendungen können unterschiedliche Ergebnisse liefern, wenn sie auf der lokalen Workstation eines Entwicklers und in einer Produktionsumgebung ausgeführt werden. Diese Unterschiede sind oft darauf zurückzuführen, dass die Entwickler unterschiedliche Versionen von Programmiersprachen verwenden, unterschiedliche Konfigurationen für unterstützende Anwendungen wie Webserver haben oder mit völlig anderen Betriebssystemen arbeiten als die Produktionsumgebung. Diese Unterschiede führen dazu, dass Supportprobleme zwischen den Teams hin- und hergeschoben werden, mit Kommentaren wie: „Auf meinem Rechner funktioniert es.“

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

Docker-Images lassen sich mithilfe von Registrys wie Docker Hub leicht verteilen. So können DevOps-Teams die Images schnell untereinander austauschen und auf den verschiedenen Hosting-Plattformen bereitstellen. Docker steckt zum Beispiel hinter der DevKinsta WordPress Development Suite von Kinsta.

Wenn komplexere Anwendungsstacks erforderlich sind, wie z. B. die Bereitstellung einer Datenbank zusammen mit einer Backend-Anwendung oder einer Sammlung von zusammenhängenden 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 außerdem von allen großen Cloud-Anbietern unterstützt, so dass DevOps-Teams die Qual der Wahl haben, wenn sie ihre Docker-Images in der Cloud ausführen wollen.

Was ist Vagrant?

VMs haben sich seit Jahrzehnten als zuverlässige und sichere Lösung für die Partitionierung und Bereitstellung von Computerressourcen bewährt. VMs sind nach wie vor die beliebtesten Dienste, die von Cloud-Anbietern bereitgestellt werden, und es gibt viele kommerzielle und Open-Source-Lösungen für Teams, die VMs vor Ort ausführen wollen.

Diese Vielfalt stellt jedoch eine Herausforderung für DevOps-Teams dar. Jede Lösung bietet eine andere Befehlszeilenschnittstelle (CLI) und API für die Erstellung und Verwaltung von VMs, was es schwierig macht, die Konsistenz zwischen lokalen Entwicklungsumgebungen und cloudbasierten Plattformen zu wahren.

Vagrant bietet eine Lösung, indem es die grundlegenden Unterschiede zwischen den VM-Plattformen abstrahiert und es DevOps-Teams ermöglicht, neue VMs mit einer einzigen CLI und einer einheitlichen Konfigurationssyntax bereitzustellen. Teams, die Vagrant einsetzen, können konsistente VMs erstellen, unabhängig davon, ob sie vor Ort oder in einer Cloud-Umgebung betrieben werden, und sie können problemlos zwischen den Umgebungen wechseln. Vagrant kann auf vielfältige Weise eingesetzt werden, unter anderem als MAMP-Ersatz (macOS, Apache, MySQL/MariaDB und PHP, Perl oder Python).

Vagrant
Vagrant

Warum Vagrant (im Vergleich zu Docker) verwenden?

Es ist möglich, eine VM zu starten und das Betriebssystem manuell zu konfigurieren, indem du Software manuell installierst und Konfigurationsdateien bearbeitest. Das ist nicht ideal, denn der Prozess ist nicht wiederholbar, d.h. VMs müssen für verschiedene Betriebssysteme und Anbieter manuell neu erstellt werden. Außerdem ist es fast unmöglich, später nachzuvollziehen, wie eine VM konfiguriert wurde.

Besser ist es, den Prozess zur Konfiguration einer virtuellen Maschine zu automatisieren. Vagrant bietet ein einziges Tool, mit dem du den Prozess der Erstellung von VMs für viele Anbieter automatisieren kannst. Vagrant bietet außerdem eine große Auswahl an hochwertigen VMs in der Vagrant Cloud, die DevOps-Teams nutzen können, um ihre eigenen VMs zu erstellen.

Was sind die Vorteile von Vagrant?

DevOps-Teams, die Vagrant nutzen, haben ein einziges Tool, mit dem sie arbeiten können, unabhängig davon, ob sie VMs für On-Premises-Plattformen, Cloud-Plattformen oder beides erstellen. Du kannst die Vagrant-Konfigurationsdateien leicht anpassen und sie später erneut ausführen oder überprüfen, um zu verstehen, wie eine VM erstellt wurde.

Mit Vagrant können DevOps-Teams auch in die Cloud oder zwischen Anbietern wechseln, ohne den Prozess zur Erstellung von VMs umzugestalten.

Die von Vagrant erstellten VMs bieten ein hohes Maß an Isolation und nutzen oft die spezielle Virtualisierungsunterstützung, die in modernen CPUs eingebaut ist. Das 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 bieten auch offizielle Vagrant-Boxen an, auf denen DevOps-Teams aufbauen können. Das verkürzt die Zeit, die für die Erstellung eigener VMs benötigt wird.

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 Paketierungsformat in Form von Images und einer leichtgewichtigen Ausführungsumgebung über Container. Container werden auf verschiedenen Plattformen einheitlich ausgeführt und geben DevOps-Teams mehr Sicherheit, dass ihre Software wie erwartet funktioniert. Docker wird von PaaS- und FaaS-Cloud-Plattformen gut unterstützt, so dass DevOps-Teams die beste Plattform für ihre Bedürfnisse wählen können.

Viele Container können auf einem einzigen Host koexistieren, hauptsächlich – aber nicht vollständig – voneinander isoliert, während sie sich denselben Ressourcenpool teilen. So lassen sich Container effizient skalieren.

Vagrant erreicht dieses Ziel, indem es eine konsistente Methode zur Erstellung von VMs mit bestehenden Providern bietet. Vagrant ist die ideale Wahl für Teams, die bereits in VMs investiert haben und sich auf das hohe Maß an Isolation, Sicherheit, Kontrolle und Anpassungsfähigkeit 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 relativ gut voneinander isoliert, verursachen aber nur sehr wenig Overhead. Das bedeutet, dass viele Container gleichzeitig auf einem gemeinsamen Betriebssystem laufen können. VMs sind die beste Lösung, wenn Teams ein hohes Maß an Isolation und Sicherheit benötigen oder viele verschiedene Betriebssysteme nebeneinander laufen lassen wollen. Vagrant ist eine praktische Lösung, um VMs auf automatisierte und wiederholbare Weise zu erstellen.

Vagrant und Docker sind keine Technologien, die sich gegenseitig ausschließen, und beide Tools können nebeneinander eingesetzt werden. DevOps-Teams können zum Beispiel Docker für die Entwicklung und den Betrieb von Anwendungen nutzen, während sie Vagrant verwenden, um spezielle Umgebungen zu erstellen und Probleme zu reproduzieren. Docker kann sogar innerhalb einer mit Vagrant erstellten VM ausgeführt werden, um neue Versionen von Docker zu testen oder um Werkzeuge zu testen, die als Docker-Images in einer isolierten Umgebung verteilt werden.

Zusammenfassung

DevOps-Teams haben viele Möglichkeiten, um Anwendungen zu erstellen, zu verteilen und auszuführen.

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

VMs bieten sichere und isolierte Ausführungsumgebungen von vielen Cloud- und On-Premises-VM-Anbietern. Vagrant abstrahiert viele Unterschiede und bietet ein einziges CLI und eine einheitliche Konfigurationssyntax, um VMs anbieterübergreifend zu instanziieren.

Bevor du mit der Entwicklung deiner nächsten App beginnst, solltest du dir ansehen, wie der Application Hosting Service von Kinsta die Vorteile von Dockerfiles nutzen kann, um die Bereitstellung deines Codes zu verwalten.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.