Virtuelle Maschinen
Eine virtuelle Maschine (VM) emuliert einen physischen Computer. Es verfügt über ein eigenes vollständiges Betriebssystem und eine Ressourcenzuweisung. Die Host -Maschine bietet die erforderlichen physischen Ressourcen, aber die virtualisierte Umgebung arbeitet als unabhängige Maschine mit eigenen BIOS-, CPU-, Speicher- und Netzwerkadaptern. Obwohl VMware heute für die moderne VM -Technologie am bekanntesten ist, gibt es die Idee der virtuellen Maschine schon lange. Im Jahr 1965 brauchte das IBM Yorktown Research Center eine Möglichkeit, die Wirksamkeit verschiedener Informatik -Ideen zu messen. Das Forschungsteam wollte zwischen den Funktionen wechseln und die Ergebnisse messen. Das Team hat ein Programm entwickelt, um eine einzelne Maschine in kleinere Partitionen zu unterteilen. Die kleineren Partitionen würden ihre eigenen Ressourcen verwalten. Sie wären kleine virtuelle Maschinen. Die VM -Idee war erfolgreich. IBM begann, Betriebssysteme basierend auf virtuellen Maschinen zu erstellen. IBM System 370 (S/370) und IBM System 390 (S/390), beide IBM VM/ESA -basierte Systeme, wurden bei Unternehmen und Universitäten beliebt. Die Idee hat auch dazu beigetragen, das UNIX -Betriebssystem und die Java -Programmiersprache zu erstellen.
Moderne virtuelle Maschinen, die auf Hypervisoren ausgeführt werden. 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 Virtualisierung (RHEV), Xenserver, Microsoft Hyper-V und VMware VSPhere / ESXI sind die prominenten Spieler. Heute haben virtuelle Maschinen das Wachstum des Cloud Computing angeregt. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean und andere Cloud -Unternehmen hängen stark von der Virtualisierungstechnologie ab.
Behälter
Container erstellen Virtualisierung auf der Ebene der Betriebssysteme. Sie arbeiten als ausführbares Softwarepaket, das Anwendungen aus seiner Umgebung isoliert. Innerhalb des Pakets verfügt ein Container über die erforderlichen Eigenschaften wie Code, Laufzeit, Systembibliotheken und Tools, um die Anwendung vom externen Einfluss getrennt zu halten. Es läuft auf dem Betriebssystem des Host -Computers. Container teilen Bibliotheken und Binärdateien, wenn möglich und trennt nur die absolut erforderlichen Ressourcen.
1979 könnten „Chroot“ -Systemanrufe Prozesse für Unix isolieren. Es war der erste Samen der Containeridee. Die frühe Container -Technologie begann mit FreeBSD -Gefängnissen im Jahr 2000. Ein Jahr später erlaubte Linux vServer mehrere Linux -Maschinen auf einem einzelnen Host,. Im Jahr 2004 lieferten Oracle Solaris -Zonen ähnliche Funktionen wie FreeBSD -Gefängnisse. In den Jahren 2006-2007 entwickelte Google einen Prozesscontainer und fusionierte ihn dann in den Linux-Kernel. Linux Container (LXC) wurde 2008 erstellt, um Linux -CGroups und Namespacing zu nutzen. Im Jahr 2013 wurde Docker durch Kombination von LXC -Ideen erstellt. Außerdem wurden Werkzeuge hinzugefügt, um Bilder von Containern einfach zu erstellen und abzurufen.
Docker
Docker ist eine Open-Source-Container-Technologie, die auf LXC basiert. Es ist beliebt, weil es das Erstellen, Ausführen und Bereitstellen von Anwendungen in einer in sich geschlossenen Umgebung erleichtert. Docker erstellt kein ganzes Betriebssystem wie eine virtuelle Maschine. Stattdessen verwendet es den Kernel des Betriebssystems des Hosts und erstellt Virtualisierung nur für die Anwendung und die erforderlichen Bibliotheken. Dieser Ansatz macht es viel leichter als virtuelle Maschinen.
Docker -Container werden aus Docker -Bildern erstellt. Docker -Bilder können als Schnappschüsse von Maschinen betrachtet werden. Benutzer können problemlos einen Container aus einem Bild starten. Die Bilder werden als Ebenen erstellt. Angenommen, ein Entwicklungsteam benötigt einen Container mit Apache und Python, der auf einer bestimmten Version von Linux installiert ist. Ein Entwickler kann ein Linux -Bild von Docker Hub herunterladen, einen Container starten, Apache und Python installieren, ein neues Bild aus dem Container erstellen und dieses Bild teilen. Andere Mitglieder des Teams müssen nicht dieselbe Installation durchlaufen. Es hilft dabei, eine konsistente Umgebung für alle zu erhalten.
Docker unterstützt auch Skript- und Multi-Container-Anwendungen. Benutzer können eine textbasierte Dockerfile verwenden, um Anforderungen zu definieren und dann Container über Docker Compose zu erstellen. Das obige Beispiel für das Erstellen eines Apache/Python/Linux -Servers kann auch durch diesen Prozess erreicht werden. Mit Docker Compose müssen Teams nur die Dockerfile teilen, um dieselbe Umgebung zu schaffen. Docker verfügt über spezialisiertere Werkzeuge für komplexe Aufgaben. Docker Swarm hilft bei der Orchestrierung großer 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 das Management von VMs. Mit einer VagrantFile können Entwickler die Eigenschaften der virtuellen Maschine wie Betriebssystem, Software -Installationen und andere definieren. Die textbasierte VagrantFile kann über die Versionskontrolle geteilt werden und die erforderliche Maschine kann mit einem einfachen Befehl wie "Vagrant Up" gestartet werden. Benutzer können sich dann wie ein physischer Server in den Computer anmelden.
Wann ist Docker oder Vagrant zu verwenden
Die Verwendung von Docker oder Vagrant hängt häufig auf die Notwendigkeit von Behältern oder virtuellen Maschinen ab. Hier sind einige Ähnlichkeiten und Unterschiede zwischen Docker und Vagrant in Bezug auf die Verwendung. Sowohl Docker als auch Vagrant haben leicht konfigurierbare Umgebungen, die über Skripte gesteuert werden können. Sie sind auch wolkenfreundlich. Vagrant Virtual Machine bietet Kernel-basierte Sicherheitstrennung. Die Trennung macht virtuelle Maschinen weniger riskant als Container. Aber Docker -Container sind sehr leicht. Sie verwenden weniger Ressourcen und sind schnell in der Ausführung. Sie können also viel mehr Container auf einem einzelnen Host haben als virtuelle Maschinen. Außerdem ist das Starten und Stoppen von Behältern im Vergleich zu VMs fast augenblicklich. Die VMs durchlaufen den vollständigen BIOS- und Betriebssystem -Startzyklus.
Die Sicherheitstrennung einer virtuellen Maschine macht einen VM-Fehler mehr in sich geschlossen. Auf der anderen Seite teilen Container Ressourcen und können einen Cascading -Crash -Effekt haben. Außerdem können Bedrohungen für Containersicherheitsbedrohungen den Kernel des Host -Betriebssystems erreichen. Die Ausführungsgeschwindigkeit und der leichte Fußabdruck von Containern machen Docker jedoch für die Entwicklung sehr attraktiv. Mit einer Microservice -Architektur können Behälter gut abschneiden, da die Risikofaktoren durch die Verwendung von Microservices gemindert werden. Außerdem wird Fortschritte gemacht, um Docker jeden Tag sicherer zu machen.
Aus praktischer Anwendungssicht werden sowohl Docker als auch Vagrant nur von IT -Fachleuten und oder Entwicklern verwendet. Sie werden nicht von allgemeinen Verbrauchern oder Computertechnologien verwendet. In einem bestimmten Vagranten ist möglicherweise praktischer, wenn Sie wirklich ein ganzes System emulieren möchten, während Docker beim Erstellen eines CI -Testsystems für kontinuierliche Integration (CI) für häufig ändern. Docker wird häufig häufig in Produktionsbereitstellungen von Anwendungen verwendet, um Web- oder Anwendungsserver auszuführen, die auf einem Host oder IP leicht getötet und nachgebildet werden. Docker ist also wahrscheinlich viel mehr ein gemeinsamer Anwendungsfall.
Docker und Vagrant sind beide nützliche Technologien, die Entwicklern helfen können, ihre Produktivität zu verbessern. Wenn die Sicherheit von Anwendungen ein Problem darstellt, ist die Verwendung von Vagrant und VMs möglicherweise eine gute Idee. Für schnelle Entwicklung und Teilen bietet Docker einen Vorteil. Die meisten Teams verwenden beide einen reibungslosen Betrieb.