Wenn Sie sich die Funktionen von Docker ansehen, werden Sie feststellen, dass die meisten von ihnen bereits von LXC bereitgestellt werden.
Was also fügt Docker hinzu? Warum sollte ich Docker über plain LXC verwenden?
Wenn Sie sich die Funktionen von Docker ansehen, werden Sie feststellen, dass die meisten von ihnen bereits von LXC bereitgestellt werden.
Was also fügt Docker hinzu? Warum sollte ich Docker über plain LXC verwenden?
Aus dem Docker FAQ:
Docker ist kein Ersatz für lxc. "lxc" bezieht sich auf die Fähigkeiten des Linux-Kernels (speziell auf Namensräume und Kontrollgruppen), die es ermöglichen, Prozesse voneinander zu isolieren und ihre Ressourcenzuweisungen zu kontrollieren.
Auf dieser niedrigschwelligen Grundlage von Kernel-Funktionen bietet Docker ein leistungsfähiges Tool mit mehreren Funktionalitäten:
Portables Bereitstellen auf verschiedenen Maschinen. Docker definiert ein Format, um eine Anwendung und alle ihre Abhängigkeiten in ein einzelnes Objekt zu bündeln, das auf jede docker-fähige Maschine übertragen und dort mit der Garantie ausgeführt werden kann, dass die der Anwendung ausgesetzte Ausführungsumgebung dieselbe ist. Lxc implementiert Prozess-Isolierung, was eine wichtige Voraussetzung für das portables Bereitstellen ist, aber allein nicht ausreicht. Wenn du mir eine Kopie deiner Anwendung in einer benutzerdefinierten lxc-Konfiguration schicken würdest, würde sie höchstwahrscheinlich nicht auf meiner Maschine so laufen wie auf deiner, da sie an die spezifische Konfiguration deiner Maschine gebunden ist: Netzwerkeinstellungen, Speicherplatz, Logging, Distribution, usw. Docker definiert eine Abstraktion für diese maschinenspezifischen Einstellungen, sodass der genau gleiche Docker-Container - unverändert - auf vielen unterschiedlichen Maschinen mit vielen unterschiedlichen Konfigurationen laufen kann.
Anwendungsorientiert. Docker ist optimiert für die Bereitstellung von Anwendungen, im Gegensatz zu Maschinen. Dies spiegelt sich in seiner API, Benutzeroberfläche, Designphilosophie und Dokumentation wider. Im Vergleich dazu konzentrieren sich die lxc-Helferskripte auf Container als leichte Maschinen - im Grunde genommen auf Server, die schneller starten und weniger RAM benötigen. Wir glauben, dass Container mehr als nur das sind.
Automatischer Build. Docker enthält ein Tool für Entwickler, um automatisch einen Container aus ihrem Quellcode zusammenzustellen, mit voller Kontrolle über Anwendungsabhängigkeiten, Build-Tools, Paketierung, usw. Sie können make, maven, chef, puppet, salt, Debian-Pakete, RPMs, Quellpakete oder eine Kombination davon frei verwenden, unabhängig von der Konfiguration der Maschinen.
Versionierung. Docker enthält git-ähnliche Möglichkeiten zum Verfolgen aufeinanderfolgender Versionen eines Containers, zum Untersuchen des Unterschieds zwischen Versionen, zum Commiten neuer Versionen, zum Zurückrollen usw. Die Historie enthält auch, wie ein Container zusammengebaut wurde und von wem, sodass man die vollständige Rückverfolgbarkeit vom Produktivserver bis zurück zum Ursprungsentwickler erhält. Docker implementiert auch inkrementelle Uploads und Downloads, ähnlich wie "git pull", sodass neue Versionen eines Containers durch das Senden von Diffs übertragen werden können.
Komponenten-Wiederverwendung. Jeder Container kann als "Grundimage" verwendet werden, um spezialisiertere Komponenten zu erstellen. Dies kann manuell oder als Teil eines automatisierten Builds erfolgen. Du kannst zum Beispiel die ideale Python-Umgebung vorbereiten und als Basis für 10 verschiedene Anwendungen verwenden. Deine ideale PostgreSQL-Konfiguration kann für alle deine zukünftigen Projekte wiederverwendet werden. Und so weiter.
Teilen. Docker hat Zugriff auf ein öffentliches Register (https://registry.hub.docker.com/), wo Tausende von Menschen nützliche Container hochgeladen haben: von Redis, CouchDB, PostgreSQL über IRC-Bouncer, Rails-App-Server bis hin zu Hadoop und Basisimages für verschiedene Distributionen. Das Register enthält auch eine offizielle "Standardbibliothek" von nützlichen Containern, die vom Docker-Team gepflegt wird. Das Register selbst ist Open Source, sodass jeder sein eigenes Register bereitstellen kann, um private Container zu speichern und zu übertragen, beispielsweise für interne Serverbereitstellungen.
Tool-Ökosystem. Docker definiert eine API zum Automatisieren und Anpassen der Erstellung und Bereitstellung von Containern. Es gibt eine Vielzahl von Tools, die mit Docker integrieren, um dessen Funktionalitäten zu erweitern. PaaS-ähnliche Bereitstellungen (Dokku, Deis, Flynn), Multi-Node-Orchestrierung (Maestro, Salt, Mesos, OpenStack Nova), Management-Dashboards (Docker-UI, OpenStack Horizon, Shipyard), Konfigurationsmanagement (Chef, Puppet), kontinuierliche Integration (Jenkins, Strider, Travis), usw. Docker etabliert sich schnell als Standard für toolbasierte Container-Tools.
Lass uns einen Blick auf die Liste der technischen Funktionen von Docker werfen und überprüfen, welche davon von LXC bereitgestellt werden und welche nicht.
1) Dateisystemisolierung: Jeder Prozesscontainer läuft in einem vollständig separaten Wurzeldateisystem.
Wird mit einfachem LXC bereitgestellt.
2) Ressourcenisolierung: Systemressourcen wie CPU und Speicher können mit Cgroups unterschiedlich auf jeden Prozesscontainer verteilt werden.
Wird mit einfachem LXC bereitgestellt.
3) Netzwerkisolierung: Jeder Prozesscontainer läuft in seinem eigenen Netzwerknamespace mit einer eigenen virtuellen Schnittstelle und IP-Adresse.
Wird mit einfachem LXC bereitgestellt.
4) Copy-on-Write: Wurzeldateisysteme werden mit Copy-on-Write erstellt, was Bereitstellung extrem schnell, speichergünstig und platzsparend macht.
Dies wird von AUFS bereitgestellt, einem Union-Dateisystem, das Docker benötigt. Sie könnten AUFS manuell mit LXC einrichten, aber Docker nutzt es als Standard.
5) Protokollierung: Die Standardstreams (stdout/stderr/stdin) jedes Prozesscontainers werden erfasst und für Echtzeit- oder Stapelabruf protokolliert.
Docker bietet dies.
6) Änderungsmanagement: Änderungen am Dateisystem eines Containers können in ein neues Image übernommen und wiederverwendet werden, um weitere Container zu erstellen. Keine Vorlagen oder manuelle Konfiguration erforderlich.
"Vorlagen oder manuelle Konfiguration" bezieht sich auf LXC, bei dem Sie beide dieser Dinge lernen müssten. Docker ermöglicht es Ihnen, Container so zu behandeln, wie Sie es von virtuellen Maschinen gewohnt sind, ohne sich mit LXC-Konfiguration befassen zu müssen.
7) Interaktive Shell: Docker kann ein Pseudo-TTY zuweisen und an die Standardeingabe eines beliebigen Containers anhängen, um beispielsweise eine temporäre interaktive Shell auszuführen.
LXC bietet dies bereits.
Ich habe gerade erst angefangen, über LXC und Docker zu lernen, daher freue ich mich über Korrekturen oder bessere Antworten.
Der obige Beitrag & Antworten werden zunehmend veraltet, da die Entwicklung von LXD weiterhin die Verbesserung von LXC vorantreibt. Ja, ich weiß, auch Docker hat sich nicht zurückgehalten.
LXD implementiert jetzt ein Repository für LXC-Container-Images, von dem ein Benutzer Beiträge leisten oder wiederverwenden kann.
LXD's REST-API ermöglicht nun sowohl lokal als auch remote die Erstellung/Bereitstellung/Verwaltung von LXC-Containern unter Verwendung einer sehr einfachen Befehlssyntax.
Zu den wichtigsten Merkmalen von LXD gehören:
Es gibt jetzt ein NCLXD-Plugin für OpenStack, mit dem OpenStack LXD verwenden kann, um LXC-Container als VMs in OpenStack bereitzustellen/zu verwalten, anstatt KVM, VMWare usw. zu verwenden.
Allerdings ermöglicht NCLXD auch eine hybride Cloud-Infrastruktur aus einer Mischung von traditionellen HW-VMs und LXC-VMs.
Das OpenStack NCLXD-Plugin unterstützt eine Liste von Funktionen, darunter:
Stop/Start/Neustart/Beenden des Containers
Anhängen/Lösen von Netzwerkschnittstelle
Container-Snapshot erstellen
Instanzcontainer retten/entretten
Container anhalten/fortsetzen/pausieren/fortsetzen
OVs/Bridge-Netzwerke
Instanz-Migration
Firewall-Unterstützung
Bis zur Veröffentlichung von Ubuntu 16.04 im April 2016 werden zusätzliche coole Funktionen wie Blockgeräteunterstützung, Live-Migrationsunterstützung vorhanden sein.
Dockers verwenden Bilder, die in Schichten erstellt sind. Dies trägt viel zur Portabilität, gemeinsamen Nutzung, Versionierung und anderen Funktionen bei. Diese Bilder lassen sich sehr einfach portabel oder übertragbar machen und da sie in Schichten vorliegen, werden Änderungen in nachfolgenden Versionen in Form von Schichten über den vorherigen Schichten hinzugefügt. Daher müssen bei der Portierung oft nicht die Grundschichten portiert werden. Dockers haben Container, die diese Bilder mit einer enthaltenen Ausführungsumgebung ausführen, sie fügen Änderungen als neue Schichten hinzu und bieten eine einfache Versionskontrolle.
Abgesehen davon ist Docker Hub ein guter Registrierungsstelle mit Tausenden öffentlichen Bildern, auf denen Sie Bilder finden können, auf denen Betriebssysteme und andere Software installiert sind. So können Sie einen ziemlich guten Start für Ihre Anwendung bekommen.
Ich werde das hier kürzer halten, das wurde bereits gefragt und beantwortet oben.
Ich würde jedoch einen Schritt zurückgehen und es etwas anders beantworten: Der Docker-Engine selbst fügt Orchestrierung als eines seiner Extras hinzu, und das ist der disruptive Teil. Sobald Sie eine App als Kombination von Containern ausführen, die 'irgendwo' auf mehreren Container-Engines laufen, wird es wirklich aufregend. Robustheit, horizontale Skalierung, vollständige Abstraktion von der zugrunde liegenden Hardware, ich könnte immer so weiter machen...
Es ist nicht nur Docker, das Ihnen das gibt, tatsächlich ist der de facto Container-Orchestrierungsstandard Kubernetes, der in vielen Varianten kommt, eine Docker-Version, aber auch OpenShift, SuSe, Azure, AWS...
Dann gibt es unter K8S alternative Container-Engines; die interessanten sind Docker und CRIO - kürzlich entwickelt, daemonlos, als Container-Engine speziell für Kubernetes gedacht, aber noch in einem unreifen Zustand. Es ist der Wettbewerb zwischen diesen, der meiner Meinung nach die langfristige Wahl für eine Container-Engine sein wird.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.