LXC vs. Docker: Warum Docker im Jahr 2023 besser ist


LXC (LinuX Containers) ist eine Virtualisierungstechnologie auf Betriebssystemebene, die die Erstellung und Ausführung mehrerer isolierter virtueller Linux-Umgebungen (VE) auf einem einzigen Steuerungshost ermöglicht. Diese Isolationsstufen oder Container können entweder für die Sandbox bestimmter Anwendungen oder für die Emulation eines völlig neuen Hosts verwendet werden. LXC verwendet die cgroups-Funktionalität von Linux, die in Version 2.6.24 eingeführt wurde, um der Host-CPU eine bessere Partitionierung des Speichers in Isolationsstufen zu ermöglichen, die als Namespaces bezeichnet werden. Beachten Sie, dass sich eine VE von einer virtuellen Maschine (VM) unterscheidet, wie wir weiter unten sehen werden.

Docker, früher dotCloud genannt, wurde als Nebenprojekt gestartet und erst 2013 als Open Source veröffentlicht. Es ist wirklich eine Erweiterung der Fähigkeiten von LXC. Dies wird durch die Verwendung einer High-Level-API erreicht, die eine einfache Virtualisierungslösung zum isolierten Ausführen von Prozessen bietet. Docker wurde in der Sprache Go entwickelt und verwendet LXC, cgroups und den Linux-Kernel selbst. Da ein Docker-Container auf LXC basiert, enthält er kein separates Betriebssystem. Stattdessen stützt es sich auf die eigene Funktionalität des Betriebssystems, wie sie von der zugrunde liegenden Infrastruktur bereitgestellt wird. Docker fungiert also als portable Container-Engine, die die Anwendung und alle ihre Abhängigkeiten in einen virtuellen Container verpackt, der auf jedem Linux-Server ausgeführt werden kann.

VE im Vergleich zu VM

Was ist also der Unterschied zwischen diesen VEs und einer herkömmlichen VM? Nun, der Hauptunterschied besteht darin, dass es in einem VE keine vorinstallierte Emulationsmanager-Software wie in einer VM gibt. In einem VE wird die Anwendung (oder das Betriebssystem) in einem Container erzeugt und ohne zusätzlichen Overhead ausgeführt, mit Ausnahme eines normalerweise winzigen VE-Initialisierungsprozesses. Es gibt keine Hardware-Emulation, was bedeutet, dass LXC abgesehen von der geringen Strafe für die Speichersoftware Bare-Metal-Leistungsmerkmale aufweist, da es nur die benötigten Anwendungen enthält. Oh, und das Betriebssystem ist auch nur eine weitere Anwendung, die auch verpackt werden kann. Im Gegensatz dazu befindet sich eine VM, die das gesamte Betriebssystem- und Maschinensetup einschließlich Festplatte, virtueller Prozessoren und Netzwerkschnittstellen verpackt. Die daraus resultierende aufgeblähte Masse braucht in der Regel lange zum Booten und verbraucht viel CPU und RAM.

Vorteil: VE. Warum sind VMs also nicht bereits den Weg des Dinosauriers gegangen? Das Problem mit VEs ist, dass sie zumindest bis jetzt nicht ordentlich in vorgefertigte und schnell einsetzbare Maschinen verpackt werden können - denken Sie an die Flexibilität und Zeitersparnis, die die unzähligen AWS-Maschinenkonfigurationen von Amazon bieten. Das bedeutet auch, dass sie nicht einfach über übersichtliche GUI-Verwaltungskonsolen verwaltet werden können und sie einige andere nette Funktionen von VMs wie IaaS-Setups und Live-Migration nicht bieten.

Die VE-Crowd ist also den Übertaktern und Moddern des CPU- und Computerhardware-Universums nicht unähnlich - sie holen mehr Nutzen aus der Standardmaschine auf dem Markt heraus. Dies erfordert jedoch fortgeschrittene technische Fähigkeiten und führt zu einer hochgradig angepassten Maschine, die nicht unbedingt mit anderen kompatibel ist. Und wenn du nicht weißt, was du tust, wirst du deine Maschine königlich durcheinander bringen.

Was sie tun

Stellen Sie sich LXC als aufgeladenes Chroot unter Linux vor. Es ermöglicht Ihnen, nicht nur Anwendungen, sondern sogar das gesamte Betriebssystem zu isolieren. Die Hilfsskripte konzentrieren sich auf die Erstellung von Containern als leichtgewichtige Maschinen - im Grunde genommen Server, die schneller booten und weniger RAM benötigen. Es gibt zwei Userspace-Implementierungen von Containern, die jeweils die gleichen Kernel-Funktionen nutzen:

  • Libvirt, das die Verwendung von Containern über den LXC-Treiber ermöglicht, indem es eine Verbindung zu 'lxc:///' herstellt. Dies kann sehr praktisch sein, da es die gleiche Verwendung wie die anderen Treiber unterstützt.
  • Eine andere Implementierung, einfach 'LXC' genannt, ist nicht kompatibel mit libvirt, aber flexibler mit mehr Userspace-Tools. Es ist möglich, zwischen den beiden zu wechseln, obwohl es Besonderheiten gibt, die zu Verwirrung führen können.

Docker hingegen kann viel mehr als das. Docker kann die folgenden Funktionen bieten:

  • 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 (http://index.docker.io/ ), 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 großartige Liste der Funktionen von Docker finden Sie in diesem Thread auf Stackoverflow: https://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc

Popularität

Wenn Popularität das einzige Kriterium für die Entscheidung zwischen diesen beiden Containerisierungstechnologien wäre, dann würde Docker LXC und sein REST-Tool LXD deutlich schlagen. Es ist leicht zu verstehen, warum, denn Docker erobert die DevOps-Welt seit seiner Einführung im Jahr 2013 im Sturm. Die Popularität von Docker ist jedoch kein isoliertes Ereignis, sondern die Anwendungscontainerisierung, für die sich Docker einsetzt, ist zufällig ein Modell, zu dem sich Tech-Giganten, darunter Google, Netflix, Twitter und andere Web-Scale-Unternehmen, aufgrund ihrer Skalierungsvorteile hingezogen fühlen.

LXC ist zwar älter, aber bei Entwicklern nicht so beliebt, wie Docker bewiesen hat. Dies ist zum Teil auf den Unterschied in den Anwendungsfällen zurückzuführen, auf die sich diese beiden Technologien konzentrieren, wobei LXC einen ähnlichen Fokus auf Systemadministratoren hat wie Lösungen wie das Betriebssystem Solaris mit seinen Solaris Zones, Linux OpenVZ und FreeBSD mit seinem BSD Jails-Virtualisierungssystem. Diese Lösungen stellen Betriebssystemcontainer für ein gesamtes System bereit, was in der Regel dadurch erreicht wird, dass ein anderer Stamm für das Dateisystem bereitgestellt wird und Umgebungen erstellt werden, die voneinander isoliert sind und den Status nicht gemeinsam nutzen können.

Docker zielte auf einen anderen Zielmarkt ab, nämlich auf Entwickler, und versuchte, Container über die Betriebssystemebene hinaus in die detailliertere Welt der Anwendung selbst zu bringen. Während Docker anfangs auf LXC aufbaute, ging es später über LXC-Container hinaus zu einer eigenen Ausführungsumgebung namens libcontainer. Im Gegensatz zu LXC, das für jeden Container ein Betriebssystem-Init startet, bietet Docker eine Betriebssystemumgebung, die von der Docker-Engine bereitgestellt wird, und ermöglicht Entwicklern das einfache Ausführen von Anwendungen, die sich in ihrer eigenen Anwendungsumgebung befinden, die durch ein Docker-Image angegeben wird. Genau wie bei LXC können diese Images von Entwicklern gemeinsam genutzt werden, wobei im Fall von Docker eine Dockerfile die Befehlsfolge zum Erstellen eines Images automatisiert wird.

Die Docker-Benutzerbasis ist groß und wächst weiter, wobei ZDNet die Anzahl der containerisierten Anwendungen auf mehr als 3,5 Millionen und Milliarden von containerisierten Anwendungen schätzt, die mit Docker heruntergeladen wurden. Linux-Giganten wie Red Hat und Canonical, die Unterstützer von Ubuntu, sind fest auf dem Docker-Zug aufgesprungen, ebenso wie sogar größere Technologieunternehmen wie Oracle und Microsoft. Mit einer solchen Akzeptanz ist es wahrscheinlich, dass Docker LXC in seiner Popularität weiter übertreffen wird, obwohl Systemcontainer wie LXC ihren Platz in der Virtualisierung traditioneller Anwendungen haben, die sich nur schwer auf die heutzutage beliebte Microservice-Architektur portieren lassen.

Tools und CLI

LXC-Tools halten sich eng an das, was Systemadministratoren mit Bare-Metal-Servern gewohnt sind, mit direktem SSH-Zugriff, der die Verwendung von Automatisierungsskripten ermöglicht, die Ihr Team möglicherweise auf Bare-Metal- oder VMs verwendet hat, die auf VirtualBox und anderen virtualisierten Produktionsumgebungen ausgeführt werden. Diese Portabilität macht die Migration jeder Anwendung von einem Linux-Server zur Ausführung auf LXC-Containern ziemlich nahtlos, aber nur, wenn Sie noch keine Containerisierungslösungen verwenden. Die LXC-Befehlszeile bietet wichtige Befehle, die routinemäßige Verwaltungsaufgaben abdecken, einschließlich des Erstellens, Startens und Löschens von LXC-Containern. LXD-Images können von den integrierten Image-Remotes abgerufen werden, indem eine LXD-Remote bereitgestellt oder ein Linux-Image manuell von einem Tarball importiert wird. Nachdem Sie einen Container aus einem Image erstellt und gestartet haben, können Sie Linux-Befehle im Container ausführen.

Die Tools von Docker konzentrieren sich auf die Docker-CLI mit Befehlen zum Auflisten, Abrufen und Verwalten von Docker-Images. Eine öffentliche Imageregistrierung, Docker Hub, bietet Zugriff auf eine Vielzahl von Images für häufig verwendete Anwendungen. Insbesondere können Sie auch Betriebssystemimages herunterladen, mit denen Sie beispielsweise ein Linux-System in einem Docker-Container ausführen können. Dies ist eine Funktionalität, die Sie normalerweise mit LXC-Containern verknüpfen würden, mit denen Sie Betriebssysteme ausführen können, ohne eine VM zu benötigen. Docker-Container zielen jedoch darauf ab, noch leichter zu sein, um die schnelle, hochgradig skalierbare Bereitstellung von Anwendungen mit Microservice-Architektur zu unterstützen.

Ökosystem- und Cloud-Unterstützung

Mit der Unterstützung von Canon haben LXC und LXD ein Ökosystem, das eng mit dem Rest der Open-Source-Linux-Community verbunden ist. Die gesamte Palette an Tools, die auf VMs und Linux-Systemen funktionieren, funktioniert in der Regel auch für LXC, schließlich laufen in den Containern auf einem LXC-Hostsystem Linux-Betriebssysteminstanzen. Das bedeutet, dass Ihr Team keinen zusätzlichen Anbieter für LXC-spezifische Tools finden muss, da die Tools, die Sie bereits unter Linux verwenden, auch dann funktionieren, wenn Ihre Anwendungen auf LXC-Containern ausgeführt werden. Für die Verwaltung Ihrer LXC-Container, die sich auf einem einzelnen Server oder möglicherweise Tausenden von Knoten befinden können, bietet der LXD-Hypervisor eine übersichtliche REST-API, die Sie verwenden können. LXD ist in Go implementiert, um eine hohe Leistung und Netzwerkparallelität zu gewährleisten, mit hervorragender Integration mit OpenStack und anderen Linux-Serversystemen.

Im Gegensatz dazu erfordert Docker eine viel spezialisiertere Unterstützung und hat ein beträchtliches Ökosystem hervorgebracht, da das Modell der Anwendungscontainer-Bereitstellung, das es erreichen soll, ein so neuartiges Konzept in der Zeitleiste der Softwarebereitstellungen ist. Der Bereich der Anwendungscontainer ist jünger als die VM-Szene, was zu einer viel flüssigeren Gestaltung führt. Docker läuft jetzt unter Windows und wird von großen Cloud-Anbietern wie AWS, IBM, Google und Microsoft Azure unterstützt.

Das Ökosystem von Docker umfasst die folgenden Tools:

  • Docker Swarm - Ein Orchestrierungstool zum Verwalten von Clustern von Docker-Containern
  • Docker Trusted Registry - Eine private Registrierung für vertrauenswürdige Docker-Images
  • Docker Compose - Ein Tool zum Starten von Anwendungen mit zahlreichen Containern, die Daten austauschen müssen.
  • Docker-Maschine - Ein Tool zum Erstellen von Docker-fähigen virtuellen Maschinen.

Es gibt weitere Tools, mit denen Sie den gesamten Stack ausfüllen können und spezielle Funktionen zur Unterstützung Ihrer Docker-Bereitstellungen bereitstellen. Docker Hub, die offizielle Open Image Registry von Docker, enthält über 100.000 Container-Images von Open-Source-Mitwirkenden, Anbietern und der Docker-Community.

Benutzerfreundlichkeit

Docker und LXC bieten beide eine umfangreiche Dokumentation mit hilfreichen Anleitungen zum Erstellen und Bereitstellen von Containern. Für Sprachen wie Python und Java gibt es Bindings und Bibliotheken, die die Verwendung für Entwicklerteams noch einfacher machen. Vergleicht man jedoch die beiden Technologien, wird die Verwaltung des ständig wachsenden Ökosystems von Docker viel mehr erfordern. Docker ist zwar zum Standard für die Ausführung containerisierter Anwendungen geworden, mit Tools wie Kubernetes und Docker Swarm, die die Orchestrierung übernehmen, aber das Ökosystem ist mit zusätzlicher Komplexität verbunden.

Ein Teil davon hat mit der Schlüsselinnovation von Docker zu tun, nämlich Single-Process-Container, die über die von LXC bereitgestellten Standard-Multiprozess-Container hinausgehen. Als Docker diese Innovation einführte, führte dies unweigerlich zu einer nachgelagerten Komplexität für Teams, die traditionelle Anwendungen in eine nicht standardmäßige Betriebssystemumgebung portierten. Es muss viel mehr Planung, Architekturentscheidungen und Skripterstellung zur Unterstützung von Anwendungen durchgeführt werden.

Mit LXC wird ein großer Teil dieser Komplexität vermieden, da LXC für jeden Container ein standardmäßiges Betriebssystem-Init ausführt und ein standardmäßiges Linux-Betriebssystem für Ihre Apps bereitstellt. Daher ist die Migration von einer VM oder einem Bare-Metal-Server oft einfacher, wenn Sie zu LXC-Containern wechseln, im Gegensatz zu Docker-Containern. Auf der anderen Seite erleichtert der Ansatz von Docker den Entwicklern die Arbeit mit Containern, da sie selbst kein rohes Low-Level-LXC verwenden müssen. Diese Spaltung zwischen Systemadministratoren und Entwicklern kennzeichnet weiterhin die Einführung dieser Tools.

Verwandte Containertechnik

Wie oben angedeutet, ist die Welt der Container besonders dynamisch und beinhaltet viele Innovationen sowohl rund um LXC, Docker als auch alternative Containerisierungstechnologien. Was heute als Standard gilt, kann ziemlich schnell alt und minderwertig werden. Aus diesem Grund sollten Sie sich der größeren Welt der Virtualisierung und Containerisierung bewusst sein. Dies sind einige der Container-Technologien, die Sie im Auge behalten sollten:

  • Kubernetes - Basierend auf den jahrelangen Erfahrungen von Google mit der Ausführung von Containern in der Produktion erleichtert Kubernetes die Bereitstellung von Containern in Ihrem Rechenzentrum, indem es einen Cluster von Servern als ein einzelnes System darstellt.
  • Docker Swarm - Swarm ist das Clustering-, Planungs- und Orchestrierungstool von Docker für die Verwaltung eines Clusters von Docker-Hosts.
  • rkt - Als Teil des CoreOS-Ökosystems von Containerisierungstools ist rkt eine sicherheitsbewusste Container-Engine, die KVM für die VM-basierte Isolierung verwendet und andere verbesserte Sicherheitsfunktionen bietet.
  • Apache Mesos - Apache Mesos ist ein Open-Source-Kernel für verteilte Systeme, der verschiedene Arten von verteilten Jobs, einschließlich Containern, ausführen kann.
  • Amazon ECS - Elastic Container Service ist der Service von Amazon zum Ausführen und Orchestrieren containerisierter Anwendungen auf AWS mit Unterstützung für Docker-Container.

Schlussfolgerung

LXC bietet die Vorteile einer VE unter Linux, vor allem die Möglichkeit, Ihre eigenen privaten Workloads voneinander zu isolieren. Es ist eine billigere und schnellere Lösung zu implementieren als eine VM, aber dies erfordert ein wenig zusätzliches Lernen und Fachwissen.

Docker ist eine deutliche Verbesserung der Fähigkeiten von LXC. Seine offensichtlichen Vorteile bestehen darin, dass Docker eine wachsende Anhängerschaft hat. Tatsächlich kommt es gefährlich nahe, den Vorteil von VMs gegenüber VEs zu negieren, da es in der Lage ist, alle von Docker erstellten Pakete schnell und einfach zu übertragen und zu replizieren. In der Tat ist es nicht weit hergeholt, sich vorzustellen, dass VM-Anbieter wie Cisco und VMware bereits nervös auf Docker blicken - ein Open-Source-Startup, das ihre VM-Gewinnmargen ernsthaft untergraben könnte. Wenn ja, könnten wir bald sehen, dass solche Anbieter auch ihre eigenen kommerziellen VE-Angebote entwickeln, die vielleicht als VM-lite-Lösungen auf große Unternehmen abzielen. Wie man so schön sagt, wenn man sie nicht schlagen kann, sollte man sich ihnen kommerziell anschließen.

Schützen Sie Ihr Unternehmen vor Datenschutzverletzungen

UpGuard kann Ihr Unternehmen vor Datenschutzverletzungen schützen, alle Ihre Datenlecks identifizieren und Ihnen helfen, die Sicherheitslage aller Ihrer Anbieter kontinuierlich zu überwachen.

>

UpGuard unterstützt auch die Einhaltung von Vorschriften über eine Vielzahl von Sicherheits-Frameworks hinweg, einschließlich der neuen Anforderungen, die in Bidens Cybersecurity Executive Order festgelegt sind.

Testen Sie die Sicherheit Ihrer Website, KLICKEN SIE HIER, um jetzt Ihre sofortige Sicherheitsbewertung zu erhalten!

Verwandte Artikel