Antworten:
Aus den Docker-FAQ :
Docker ist kein Ersatz für lxc. "lxc" bezieht sich auf Funktionen des Linux-Kernels (insbesondere Namespaces und Kontrollgruppen), die Sandboxing-Prozesse voneinander ermöglichen und deren Ressourcenzuweisungen steuern.
Zusätzlich zu dieser einfachen Grundlage für Kernel-Funktionen bietet Docker ein High-Level-Tool mit mehreren leistungsstarken Funktionen:
Portable Bereitstellung auf mehreren Computern.Docker definiert ein Format zum Bündeln einer Anwendung und aller ihrer Abhängigkeiten in einem einzigen Objekt, das auf jeden Docker-fähigen Computer übertragen und dort ausgeführt werden kann, mit der Garantie, dass die der Anwendung zur Verfügung gestellte Ausführungsumgebung dieselbe ist. Lxc implementiert Prozess-Sandboxing, eine wichtige Voraussetzung für die tragbare Bereitstellung, die jedoch für die tragbare Bereitstellung allein nicht ausreicht. Wenn Sie mir eine Kopie Ihrer Anwendung senden, die in einer benutzerdefinierten lxc-Konfiguration installiert ist, wird sie mit ziemlicher Sicherheit nicht so auf meinem Computer ausgeführt wie auf Ihrem, da sie an die spezifische Konfiguration Ihres Computers gebunden ist: Netzwerk, Speicher, Protokollierung, Distribution, usw. Docker definiert eine Abstraktion für diese maschinenspezifischen Einstellungen, sodass genau derselbe Docker-Container - unverändert - auf vielen verschiedenen Computern ausgeführt werden kann.
Anwendungsorientiert. Docker ist im Gegensatz zu Maschinen für die Bereitstellung von Anwendungen optimiert . Dies spiegelt sich in der API, der Benutzeroberfläche, der Designphilosophie und der Dokumentation wider. Im Gegensatz dazu konzentrieren sich die lxc-Hilfsskripte auf Container als leichte Maschinen - im Grunde genommen Server, die schneller booten und weniger RAM benötigen. Wir denken, dass Container mehr als nur das sind.
Automatischer Build . Docker enthält ein Tool, mit dem Entwickler automatisch einen Container aus ihrem Quellcode zusammenstellen können, mit vollständiger Kontrolle über Anwendungsabhängigkeiten, Build-Tools, Verpackung usw. Sie können make, maven, chef, Marionette, Salt, Debian-Pakete, RPMs und Source verwenden Tarballs oder eine beliebige Kombination der oben genannten, unabhängig von der Konfiguration der Maschinen .
Versionierung. Docker enthält git-ähnliche Funktionen zum Verfolgen aufeinanderfolgender Versionen eines Containers, zum Überprüfen des Unterschieds zwischen Versionen, zum Festschreiben neuer Versionen, zum Zurücksetzen usw. Der Verlauf enthält auch, wie und von wem ein Container zusammengestellt wurde, sodass Sie die vollständige Rückverfolgbarkeit vom Produktionsserver erhalten den ganzen Weg zurück zum Upstream-Entwickler. Docker implementiert auch inkrementelle Uploads und Downloads, ähnlich wie "git pull", sodass neue Versionen eines Containers nur durch Senden von Diffs übertragen werden können.
Wiederverwendung von Komponenten. Jeder Container kann als "Basis-Image" verwendet werden, um speziellere Komponenten zu erstellen. Dies kann manuell oder als Teil eines automatisierten Builds erfolgen. Sie können beispielsweise die ideale Python-Umgebung vorbereiten und als Basis für 10 verschiedene Anwendungen verwenden. Ihr ideales Postgresql-Setup kann für alle Ihre zukünftigen Projekte wiederverwendet werden. Und so weiter.
Teilen. Docker hat Zugriff auf eine öffentliche Registrierung ( https://registry.hub.docker.com/ ), in die Tausende von Menschen nützliche Container hochgeladen haben: alles von Redis, Couchdb, Postgres über IRC-Bouncer bis hin zu Rails-App-Servern, um Bilder zu erstellen verschiedene Distributionen. Die Registrierung enthält auch eine offizielle "Standardbibliothek" nützlicher Container, die vom Docker-Team verwaltet werden. Die Registrierung selbst ist Open Source, sodass jeder seine eigene Registrierung bereitstellen kann, um private Container zu speichern und zu übertragen, beispielsweise für interne Serverbereitstellungen.
Werkzeug-Ökosystem. Docker definiert eine API zum Automatisieren und Anpassen der Erstellung und Bereitstellung von Containern. Es gibt eine Vielzahl von Tools, die in Docker integriert sind, um dessen Funktionen zu erweitern. PaaS-ähnliche Bereitstellung (Dokku, Deis, Flynn), Orchestrierung mit mehreren Knoten (Maestro, Salt, Mesos, Openstack Nova), Management-Dashboards (Docker-UI, Openstack-Horizont, Werft), Konfigurationsmanagement (Chef, Marionette), kontinuierliche Integration (Jenkins, Strider, Travis) usw. Docker etabliert sich schnell als Standard für containergestützte Werkzeuge.
Ich hoffe das hilft!
Werfen wir einen Blick auf die Liste der technischen Funktionen von Docker und prüfen, welche von LXC bereitgestellt werden und welche nicht.
1) Dateisystemisolation : Jeder Prozesscontainer wird in einem vollständig separaten Root-Dateisystem ausgeführt.
Mit einfachem LXC versehen.
2) Ressourcenisolierung : Systemressourcen wie CPU und Speicher können mithilfe von cgroups jedem Prozesscontainer unterschiedlich zugewiesen werden.
Mit einfachem LXC versehen.
3) Netzwerkisolation : Jeder Prozesscontainer wird in einem eigenen Netzwerk-Namespace mit einer eigenen virtuellen Schnittstelle und IP-Adresse ausgeführt.
Mit einfachem LXC versehen.
4) Copy-on-Write : Root-Dateisysteme werden mithilfe von Copy-on-Write erstellt, wodurch die Bereitstellung extrem schnell, speicher- und festplattenmäßig ist.
Dies wird von AUFS bereitgestellt, einem Union-Dateisystem, von dem Docker abhängt. Sie können AUFS selbst manuell mit LXC einrichten, Docker verwendet es jedoch als Standard.
5) Protokollierung : Die Standard-Streams (stdout / stderr / stdin) jedes Prozesscontainers werden gesammelt und für den Echtzeit- oder Batch-Abruf protokolliert.
Docker bietet dies.
6) Änderungsverwaltung : Änderungen am Dateisystem eines Containers können in ein neues Image übernommen und zum Erstellen weiterer Container wiederverwendet werden. Keine Vorlage oder manuelle Konfiguration erforderlich.
"Vorlagen oder manuelle Konfiguration" bezieht sich auf LXC, wo Sie beide Dinge lernen müssen. Mit Docker können Sie Container so behandeln, wie Sie es von virtuellen Maschinen gewohnt sind, ohne sich mit der LXC-Konfiguration vertraut zu machen.
7) Interaktive Shell : Docker kann eine Pseudo-Tty zuweisen und an die Standardeingabe eines beliebigen Containers anhängen, um beispielsweise eine interaktive Wegwerf-Shell auszuführen.
LXC bietet dies bereits an.
Ich habe gerade erst angefangen, etwas über LXC und Docker zu lernen, daher würde ich Korrekturen oder bessere Antworten begrüßen.
unshare
Tool (oder direkt mit dem clone()
Syscall). Ebenso vereinfacht Docker die Verwendung dieser Dinge (und bringt viele weitere Funktionen auf den Tisch, z. B. die Möglichkeit, Bilder zu verschieben / zu ziehen). Mein 2c.
update-index
und read-tree
ohne bekannte Tools wie add
, commit
, und merge
. Docker bietet diese Schicht aus "Porzellan" über der "Installation" von LXC, sodass Sie mit Konzepten auf höherer Ebene arbeiten und sich weniger um Details auf niedriger Ebene kümmern müssen.
Die obigen Beiträge und Antworten werden schnell veraltet, da die Entwicklung von LXD LXC weiter verbessert . Ja, ich weiß, dass Docker auch nicht stehen geblieben ist.
LXD implementiert jetzt ein Repository für LXC-Container-Images, aus dem ein Benutzer Push / Pull ziehen kann, um einen Beitrag zu leisten oder ihn wiederzuverwenden.
Die REST-API von LXD für LXC ermöglicht jetzt sowohl die lokale als auch die Remote- Erstellung / Bereitstellung / Verwaltung von LXC-Containern mithilfe einer sehr einfachen Befehlssyntax.
Hauptmerkmale von LXD sind:
Es gibt jetzt ein NCLXD-Plugin für OpenStack, mit dem OpenStack LXD zum Bereitstellen / Verwalten von LXC-Containern als VMs in OpenStack verwenden kann, anstatt KVM, VMware usw. zu verwenden.
NCLXD ermöglicht jedoch auch eine Hybrid-Cloud aus einer Mischung traditioneller HW-VMs und LXC-VMs.
Das OpenStack nclxd-Plugin enthält eine Liste der unterstützten Funktionen:
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
Bis zur Veröffentlichung von Ubuntu 16.04 im April 2016 wird es weitere coole Funktionen wie Blockgeräteunterstützung und Live-Migrationsunterstützung geben .
Docker verwenden Bilder, die in Ebenen erstellt wurden. Dies trägt wesentlich zur Portabilität, Freigabe, Versionierung und anderen Funktionen bei. Diese Bilder lassen sich sehr einfach portieren oder übertragen. Da sie sich in Ebenen befinden, werden Änderungen in nachfolgenden Versionen in Form von Ebenen gegenüber vorherigen Ebenen hinzugefügt. Während Sie also mehrmals portieren, müssen Sie die Basisebenen nicht portieren. Docker verfügen über Container, in denen diese Images mit einer enthaltenen Ausführungsumgebung ausgeführt werden. Sie fügen Änderungen als neue Ebenen hinzu und bieten so eine einfache Versionskontrolle.
Abgesehen davon ist Docker Hub eine gute Registrierung mit Tausenden von öffentlichen Images, in denen Sie Images finden können, auf denen Betriebssystem und andere Software installiert sind. So erhalten Sie einen ziemlich guten Vorsprung für Ihre Bewerbung.
Gehen diese prägnanter zu halten, wird dies bereits gestellt und beantwortet oben .
Ich würde jedoch einen Schritt zurücktreten und etwas anders antworten. Die Docker-Engine selbst fügt Orchestrierung als eines ihrer Extras hinzu, und dies ist der störende Teil. Sobald Sie eine App als Kombination von Containern ausführen, die "irgendwo" in mehreren Container-Engines ausgeführt werden, wird es wirklich aufregend. Robustheit, horizontale Skalierung, vollständige Abstraktion von der zugrunde liegenden Hardware, ich könnte weiter und weiter ...
Es ist nicht nur Docker, der Ihnen dies bietet. Der De-facto-Standard für Container-Orchestrierung ist Kubernetes, das in vielen Varianten erhältlich ist, eine Docker-Version, sondern auch OpenShift, SuSe, Azure, AWS ...
Dann gibt es unter K8S alternative Containermotoren; Die interessanten sind Docker und CRIO - kürzlich gebaut, daemonless, als Container-Engine speziell für Kubernetes gedacht, aber unausgereift. Es ist die Konkurrenz zwischen diesen, von der ich denke, dass sie die echte langfristige Wahl für einen Containermotor sein wird.