Docker vs. Vagrant [Infografik]
Mit dem enormen Wachstum von Virtualisierung und Cloud Computing ist auch die durchschnittliche Anzahl der virtuellen Maschinen (VMs), die der Administrator von heute verwalten muss, entsprechend gestiegen. Das manuelle Erstellen einer vollständigen VM auf modernen Virtualisierern wie VMWare und Hyper-V ist ein mühsamer Prozess, da diese Produkte einen Snapshot der gesamten Maschinenkonfiguration erstellen und diesen dann auf einen anderen Computer replizieren. Wie Sie sich vorstellen können, verbrauchen VM-Images viel Platz und Zeit.
Eine intelligente Person beobachtete jedoch, wie VMs funktionieren, und entschied, dass das Modell verbessert werden musste. Ein Virtualisierer erstellt ein Paket oder Image, das ein vollständiges Betriebssystem- und Maschinensetup enthält, einschließlich Festplatte, virtueller Prozessoren und Netzwerkschnittstellen. Das ist ineffizient - oft ist das, was Sie wirklich neu erstellen möchten, nur die Betriebssystemplattform und einige Apps. Gibt es einen besseren Weg, dies zu tun? Wie sich herausstellt, ja, wenn auch mit einigen Vorbehalten. Und Docker und Vagrant sind zwei solcher Lösungen, die unterschiedliche Wege einschlagen, um die Einschränkungen der herkömmlichen VM zu lösen.
Was sie sind
Docker, früher dotCloud genannt und 2013 als Open Source veröffentlicht, ist ein reines Linux-Tool für virtuelle Umgebungen (VE), kein VM-Tool. Es baut auf LxC (LinuX Containers) auf, das die cgroups-Funktionalität verwendet, um das Erstellen und Ausführen mehrerer isolierter virtueller Linux-Umgebungen (VE) auf einem einzigen Steuerungshost zu ermöglichen. Im Gegensatz zu einer VM erstellt ein VE wie Docker also keinen eigenen virtuellen Computer mit einem eigenen Betriebssystem, Prozessoren und Hardware-Emulation. Ein VE ist VM-light; Es basiert auf dem bereits vorhandenen Kernel-Image der zugrunde liegenden Hardware und erstellt nur einen "Container", in dem Sie Ihre Apps ausführen und sogar das Betriebssystem neu erstellen, wenn Sie möchten, da das Betriebssystem auch nur eine weitere App ist, die auf dem Kernel ausgeführt wird. Es belastet das System nur geringfügig zusätzlich, so dass im Gegensatz zur herkömmlichen VM bei der Verwendung von Docker nur sehr wenig Overhead entsteht. Aufgrund des gemeinsam genutzten Kernels ist die Isolierung von Docker nicht so gut wie die einer vollständigen VM, aber sie eignet sich für viele Leute gut.
Vagrant, ein Open-Source-Produkt, das 2010 veröffentlicht wurde, lässt sich am besten als VM-Manager beschreiben. Es ermöglicht Ihnen, ein Skript für die VM-Konfiguration und das Bereitstellungssetup zu erstellen und zu packen. Es ist so konzipiert, dass es auf fast jedem VM-Tool ausgeführt werden kann - VirtualBox, VMWare, AWS usw. Der Standard-Support ist jedoch nur für VirtualBox enthalten, bei den anderen Anbietern müssen Sie zuerst deren Plugins installieren (https://www.vagrantup.com/docs/providers/). Vagrant ist jedoch immer noch eine virtuelle Maschine, wenn auch eine mit leistungsfähigeren Funktionen als die Standard-VM-Tools da draußen. Sie können Vagrant beispielsweise in CM-Tools wie Puppet und Chef integrieren, um Ihre eigenen VM-Setups und -Konfigurationen bereitzustellen.
Wie sie funktionieren
Docker ist eigentlich eine Erweiterung von LxC, das selbst eine Art aufgeladene Linux-Chroot ist. LxC kann nicht nur Ihre installierten Anwendungen, sondern sogar das gesamte Betriebssystem isolieren. Docker gibt Ihnen die Möglichkeit, das gewünschte Betriebssystem und die gewünschten Apps in einem gemeinsamen Image zu erstellen und dieses Image dann einfach auf anderen Docker-Hosts bereitzustellen. Dies offenbart eine weitere Einschränkung: Auf dem Computer, auf dem Sie die Bereitstellung durchführen, muss auch Docker vorinstalliert sein. Docker ist in der leichtgewichtigen Go-Sprache geschrieben und verwendet Hilfsskripts, um Container als leichtgewichtige Maschinen zu erstellen. Docker baut auf den Fähigkeiten von LxC und cgroups auf, indem es die folgenden Funktionen hinzufügt:
- 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 in dieser Stackoverflow-Antwort: https://stackoverflow.com/questions/17989306/what-does-docker-add-to-lxc-tools-the-userspace-lxc-tools
Vagrant hingegen erstellt immer noch VMs, obwohl diese immer noch leichter sind als die von VM-Emulatoren erstellten Full-Fat-VMs. Vagrant bietet eine reproduzierbare Möglichkeit, vollständig virtualisierte Maschinen mit der VirtualBox-, AWS- oder VMWare-Technologie von Oracle als Anbieter zu generieren. Es gibt ein Plugin namens vagrant-libvirt, das Unterstützung für libvirt zu Vagrant hinzufügt.
Schlussfolgerung
Interessanterweise haben einige unternehmungslustige Administratoren einen Weg gefunden, sie zu nutzen, um sich gegenseitig zu ergänzen, obwohl Vagrant und Docker Konkurrenten zu sein scheinen. In einem solchen Szenario wird Vagrant verwendet, um eine Basis-VM zu erstellen, und wenn Sie dann verschiedene Konfigurationen erstellen müssen, die alle diese Basis-VM verwenden, verwenden Sie Docker, um verschiedene einfache Versionen bereitzustellen und zu erstellen. In diesem Diskussionsthread finden Sie eine hervorragende Erklärung, wie Docker seine Magie entfaltet: https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine?rq=1
Wenn Ihr Hauptbedarf die Isolierung ist und Sie schnell mehrere verschiedene VE-Images erstellen müssen, dann verwenden Sie auf jeden Fall Docker. Docker eignet sich auch ideal für Umgebungen, in denen Sie mehrere kurzlebige Images testen, z. B. wenn Sie verschiedene Szenarien zum Testen oder Debuggen von Software benötigen. Vagrant ist besser, wenn Sie vollständige VMs und vollständige Isolierung für diese VMs benötigen.
Vagrant vs. Docker Infografik
