Landstreicher

Docker vs Vagrant

Docker vs Vagrant

Entwicklungs- und Betriebsteams beschäftigen sich von Anfang an mit der Komplexität von Softwareumgebungen. Es ist ein häufiges Problem, bei dem funktionierender Code in einer Umgebung in einer anderen nicht funktioniert.

Sowohl Docker als auch Vagrant tragen dazu bei, vorhersehbare und wiederholbare Entwicklungsumgebungen zu erstellen. Docker verwendet jedoch Container-Technologie, während Vagrant virtuelle Maschinen verwendet, um dieses Ziel zu erreichen. Das Verständnis der Stärken und Schwächen von Docker und Vagrant wird Entwicklern helfen, diese Tools zu kombinieren und aufeinander abzustimmen, um die gewünschten Ergebnisse zu erzielen.

Beginnen wir zuerst mit den zugrunde liegenden Technologien.

Virtuelle Maschine

Eine virtuelle Maschine (VM) emuliert einen physischen Computer. Es kommt mit einem eigenen vollständigen Betriebssystem und Ressourcenzuweisung. Der Hostcomputer stellt die erforderlichen physischen Ressourcen bereit, aber die virtualisierte Umgebung arbeitet als unabhängiger Computer mit eigenem BIOS, CPU, Speicher und Netzwerkadaptern.

Obwohl VMware heute vor allem für die moderne VM-Technologie bekannt ist, gibt es die Idee der virtuellen Maschine schon lange.

1965 benötigte das IBM Yorktown Research Center eine Möglichkeit, die Effektivität verschiedener Informatikideen zu messen. Das Forschungsteam wollte zwischen den Funktionen wechseln und die Ergebnisse messen. Das Team entwickelte ein Schema, um eine einzelne Maschine in kleinere Partitionen zu unterteilen. Die kleineren Partitionen würden ihre eigenen Ressourcen verwalten. Das wären kleine virtuelle Maschinen.

Die VM-Idee war erfolgreich. IBM begann mit der Entwicklung von Betriebssystemen basierend auf virtuellen Maschinen. IBM System 370 (S/370) und IBM System 390 (S/390), beides IBM VM/ESA-basierte Systeme, wurden bei Unternehmen und Universitäten beliebt, weil sie es den Institutionen ermöglichten, ihren Benutzern die gemeinsame Nutzung von Computerressourcen zu ermöglichen, ohne die Umgebungen des anderen zu beeinträchtigen. Die Idee half auch bei der Entwicklung des Unix-Betriebssystems und der Programmiersprache Java.

Moderne virtuelle Maschinen laufen auf Hypervisoren. Hypervisoren sind die Software, Firmware oder Hardware, die für die Erstellung und Ausführung von VMs verantwortlich ist. Es gibt viele Hypervisoren auf dem Markt. KVM, Red Hat Enterprise Virtualization (RHEV), XenServer, Microsoft Hyper-V und VMware vSphere / ESXi sind die prominenten Player.

Heute haben virtuelle Maschinen das Wachstum von Cloud Computing beflügelt. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean und andere Cloud-Unternehmen hängen stark von der Virtualisierungstechnologie ab.

Behälter

Container schaffen Virtualisierung auf Betriebssystemebene. Sie funktionieren als ausführbares Softwarepaket, das Anwendungen von ihrer Umgebung isoliert. Innerhalb des Pakets verfügt ein Container über die notwendigen Eigenschaften wie Code, Laufzeit, Systembibliotheken und Tools, um die Anwendung von äußeren Einflüssen zu trennen. Es läuft auf dem Betriebssystem des Host-Rechners. Container teilen nach Möglichkeit Bibliotheken und Binärdateien und trennen nur die unbedingt notwendigen Ressourcen.

1979 konnten „chroot“-Systemaufrufe Prozesse für Unix isolieren. Es war die erste Saat der Container-Idee. Die frühe Container-Technologie begann mit FreeBSD Jails im Jahr 2000. Ein Jahr später ermöglichte Linux VServer die Ausführung mehrerer Linux-Maschinen auf einem einzigen Host. Im Jahr 2004 boten Oracle Solaris Zones ähnliche Funktionen wie FreeBSD Jails. In den Jahren 2006-2007 hat Google Process Container entwickelt und dann in den Linux-Kernel integriert. Linux Containers (LXC) wurde 2008 erstellt, um die Vorteile von Linux-Cgroups und Namespaces zu nutzen. Im Jahr 2013 entstand Docker durch die Kombination von LXC-Ideen. Es wurden auch Tools hinzugefügt, um Images von Containern einfach zu erstellen und abzurufen.

Docker

Docker ist eine Open-Source-Container-Technologie basierend auf LXC. Es ist beliebt, weil es das Erstellen, Ausführen und Bereitstellen von Anwendungen in einer eigenständigen Umgebung erleichtert. Docker erstellt kein ganzes Betriebssystem wie eine virtuelle Maschine. Stattdessen verwendet es den Kernel des Betriebssystems des Hosts und erstellt eine Virtualisierung nur für die Anwendung und die erforderlichen Bibliotheken. Dieser Ansatz macht es viel leichter als virtuelle Maschinen.

Docker-Container werden aus Docker-Images erstellt. Docker-Images kann man sich als Snapshots von Maschinen vorstellen. Benutzer können einen Container ganz einfach aus einem Image starten. Die Bilder werden als Ebenen erstellt. Angenommen, ein Entwicklungsteam benötigt einen Container, auf dem Apache und Python auf einer bestimmten Linux-Version installiert sind. Ein Entwickler kann ein Linux-Image von Docker Hub herunterladen, einen Container starten, Apache und Python installieren, ein neues Image aus dem Container erstellen und dieses Image teilen. Andere Mitglieder des Teams müssen nicht dieselbe Installation durchlaufen. Es trägt dazu bei, eine konsistente Umgebung für alle aufrechtzuerhalten.

Docker unterstützt auch Scripting und Multi-Container-Anwendungen. Benutzer können ein textbasiertes Dockerfile verwenden, um Anforderungen zu definieren und dann Container über Docker Compose zu erstellen. Das obige Beispiel zum Erstellen eines Apache/Python/Linux-Servers kann auch durch diesen Prozess erreicht werden. Mit Docker Compose müssen Teams nur das Dockerfile freigeben, um dieselbe Umgebung zu erstellen.

Docker hat speziellere Tools für komplexe Aufgaben. Docker Swarm hilft bei der Orchestrierung umfangreicher Docker-Bereitstellungen.

Landstreicher

Vagrant ist ein Open-Source-Tool, mit dem virtuelle Maschinen erstellt und gewartet werden können. Es funktioniert mit VirtualBox, VMWare, AWS und anderen Anbietern.

Vagrant vereinfacht die Verwaltung von VMs. Mit einer Vagrantfile können Entwickler die Eigenschaften der virtuellen Maschine wie Betriebssystem, Softwareinstallationen und andere definieren. Die textbasierte Vagrantfile kann über die Versionskontrolle geteilt und die erforderliche Maschine mit einem einfachen Befehl wie „Vagrant up“ gestartet werden. Benutzer können sich dann wie bei einem physischen Server am Computer anmelden log.

Wann Sie Docker oder Vagrant verwenden sollten

Beim Einsatz von Docker oder Vagrant kommt es oft auf die Notwendigkeit von Containern oder virtuellen Maschinen an. Hier sind einige Gemeinsamkeiten und Unterschiede zwischen Docker und Vagrant in Bezug auf die Nutzung:

Ähnlichkeiten

Sowohl Docker als auch Vagrant verfügen über leicht konfigurierbare Umgebungen, die über Skripte gesteuert werden können. Sie sind auch Cloud-freundlich.

Unterschiede

Vagrant Virtual Machine bietet Kernel-basierte Sicherheitstrennung. Die Trennung macht virtuelle Maschinen weniger riskant als Container. Aber Docker-Container sind sehr leicht. Sie verbrauchen weniger Ressourcen und sind schnell in der Ausführung. Sie können also viel mehr Container auf einem einzigen Host haben als virtuelle Maschinen. Außerdem erfolgt das Starten und Stoppen von Containern im Vergleich zu VMs fast sofort. Die VMs durchlaufen den vollständigen BIOS- und Betriebssystem-Boot-Zyklus.

Die Sicherheitstrennung einer virtuellen Maschine macht einen VM-Ausfall eigenständiger. Auf der anderen Seite teilen sich Container Ressourcen und können einen kaskadierenden Crash-Effekt haben. Container-Sicherheitsbedrohungen können auch den Kernel des Host-Betriebssystems erreichen.

Die Ausführungsgeschwindigkeit und der geringe Platzbedarf von Containern machen Docker jedoch für die Entwicklung sehr attraktiv. Mit einer Microservice-Architektur können Container eine gute Leistung erbringen, da die Risikofaktoren durch den Einsatz von Microservices gemindert werden. Außerdem werden Fortschritte gemacht, um Docker jeden Tag sicherer zu machen.

Fazit

Docker und Vagrant sind beides nützliche Technologien, die Entwicklern helfen können, ihre Produktivität zu verbessern. Wenn die Anwendungssicherheit ein Anliegen ist, ist die Verwendung von Vagrant und VMs möglicherweise eine gute Idee. Für eine schnelle Entwicklung und gemeinsame Nutzung bietet Docker einen Vorteil. Die meisten Teams verwenden beides, um einen reibungslosen Betrieb zu gewährleisten.

Verweise:

Beste Spielkonsolen-Emulatoren für Linux
Dieser Artikel listet beliebte Spielekonsolen-Emulationssoftware auf, die für Linux verfügbar ist. Emulation ist eine Softwarekompatibilitätsschicht, ...
Beste Linux-Distributionen für Gaming im Jahr 2021
Das Linux-Betriebssystem hat sich weit von seinem ursprünglichen, einfachen, serverbasierten Aussehen entfernt. Dieses Betriebssystem hat sich in den ...
So erfassen und streamen Sie Ihre Gaming-Sitzung unter Linux
In der Vergangenheit galt das Spielen von Spielen nur als Hobby, aber mit der Zeit verzeichnete die Spieleindustrie ein enormes Wachstum in Bezug auf ...