Docker ist jetzt sehr beliebt und die Containertechnologie scheint allmächtig zu sein, aber dies ist tatsächlich ein Missverständnis. Lassen Sie sich nicht von der Hype -Blase fasziniert. In diesem Artikel wird der Hype weggeworfen und die fünf aktuellen Missverständnisse von Docker rational aus der Perspektive der Java -Programmierer auflisten, um Ihnen dabei zu helfen, die Vorteile und Probleme von Docker besser zu verstehen.
Wenn wir den Hype von Medien und Herstellern beiseite legen, wie können wir Docker besser und rationaler verwenden?
Docker hat in letzter Zeit viel Aufmerksamkeit erregt, und die Gründe sind offensichtlich. Wie man den Code erfolgreich liefert, hat immer alle beunruhigt. Die traditionelle Containertechnologie ist unter vielen Bedürfnissen und Vorlagen chaotisch. Docker kann einfach und wiederholt Container erstellen. Die Verwendung von Docker ermöglicht eine schnellere und natürlichere Code -Lieferung als andere Container. Duang, Docker ist beliebt! Es gibt auch einige Missverständnisse und Missverständnisse. Vertrauen Sie anderen nicht, um zu sagen, dass Docker einfach zu bedienen ist oder nicht. Wenn Sie von Ihnen rational und umfassend über Docker nachdenken, können Sie wirklich verstehen, ob Sie es wirklich brauchen.
In diesem Artikel werden fünf Hauptdocker aus einer Java -Perspektive aufgeführt. Aber zuerst ein paar Hintergrundwissen einführen. Um Docker besser zu verstehen, haben wir Avishai Ish-Shalom aus Lowbytes konsultiert, der über umfangreiche Docker-Erfahrung verfügt und auch Organisator der DevOps Days Conference ist. Wir haben diese Missverständnisse mit ihm aufgelistet.
Hauptmissverständnis
1. Docker ist eine leichte virtuelle Maschine
Dies ist das Hauptfehlverständnis, wenn Sie Anfänger Docker docken. Dieses Missverständnis ist verständlich, Docker sieht ein bisschen wie eine virtuelle Maschine aus. Einige Leute vergleichen sogar den Unterschied zwischen Docker und virtuellen Maschinen auf der Docker -Website. Docker ist jedoch kein leichter virtueller Maschine, sondern ein verbesserter Linux -Container (LXC). Docker und virtuelle Maschinen sind völlig unterschiedlich. Wenn Sie Docker -Container als leichte virtuelle Maschinen verwenden, werden Sie auf viele Probleme stoßen.
Vor der Verwendung von Docker müssen Sie verstehen, dass es viele wesentliche Unterschiede zwischen Docker -Containern und virtuellen Maschinen gibt.
Ressourcenisolation: Docker kann die Ressourcen -Isolationsstufe, die eine virtuelle Maschine bereitstellen kann, nicht erreichen. Die Ressourcen der virtuellen Maschine sind stark isoliert, und Docker musste seit ihrer Gründung einige Ressourcen teilen. Diese Ressourcen können nicht von Docker isoliert und geschützt werden, wie z. B. Page -Cache und Kernel -Entropiepool. (Hinweis: Der Kernel-Entropiepool ist interessant. Er sammelt und speichert zufällige Bits, die von Systemvorgängen generiert werden. Die Maschine verwendet diesen Pool, wenn er randomisiert werden muss, wie z. B. kennwortbezogen.) Wenn der Docker-Container diese gemeinsam genutzten Ressourcen einnimmt, können andere Prozesse nur warten, bevor diese Ressourcen veröffentlicht werden.
Overhead: Die meisten Menschen wissen, dass die CPU und der RAM einer virtuellen Maschine eine physische maschinenähnliche Leistung liefern können, aber es gibt eine Menge zusätzlicher IO-Overhead. Da das Gastbetrieb der virtuellen Maschinen aufgeben wird, ist das Docker -Paket kleiner und erfordert weniger Speicheraufwand als virtuelle Maschinen. Dies bedeutet jedoch nicht, dass Docker keine Overhead -Probleme hat. Docker -Container müssen immer noch auf den IO -Overhead achten, aber sie sind nicht so ernst wie virtuelle Maschinen.
Kernel -Nutzung: Docker -Container und virtuelle Maschinen unterscheiden sich in der Kernelverwendung völlig. Jede virtuelle Maschine verwendet einen Kernel. Docker -Container teilen Kernel unter allen Containern. Shared Kernel bringen einige Effizienzgewinne mit sich, jedoch auf Kosten der hohen Verfügbarkeit und Redundanz. Wenn in einer virtuellen Maschine ein Kernel -Crash auftritt, wird nur die virtuelle Maschine auf diesem Kernel betroffen. Wenn der Kern des Docker -Containers abstürzt, sind alle Container betroffen.
2. Docker macht Anwendungen skalierbar
Da Docker in kürzester Zeit Code auf mehreren Servern bereitstellen kann, werden einige Leute natürlich glauben, dass Docker die Anwendung selbst skalierbar machen kann. Leider ist das falsch. Code ist der Eckpfeiler der Anwendung, und Docker schreibt den Code nicht um. Die Skalierbarkeit einer Anwendung hängt immer noch vom Programmierer ab. Durch die Verwendung von Docker wird Ihr Code nicht automatisch einfach zu skalieren, sondern erleichtert die Bereitstellung von Servern.
3.. Docker wird in Produktionsumgebungen häufig verwendet
Da Docker in vollem Gange ist, glauben viele Menschen, dass Docker in Produktionsumgebungen in großem Maßstab verwendet werden kann. In der Tat ist das nicht richtig. Beachten Sie, dass Docker immer noch eine sehr neue Technologie ist, unreif und wachsend, was bedeutet, dass immer noch viele nervige Fehler und Funktionen verbessert werden müssen. Es ist wahr, dass Sie an neuen Technologien interessiert sind, aber es ist am besten, die richtigen Nutzungsszenarien zu finden und darauf, was geachtet werden muss. Jetzt ist Docker einfach auf Entwicklungsumgebungen zu bewerben. Die Verwendung von Docker kann problemlos viele verschiedene Umgebungen schaffen (zumindest gibt es den Menschen das Gefühl, dass sie verschiedene Umgebungen schaffen können), was für die Entwicklung sehr nützlich ist.
In Produktionsumgebungen begrenzt Dockers Unreife und Unvollkommenheit auch die Nutzungsszenarien. Beispielsweise unterstützt Docker die Überwachung von Netzwerken und Ressourcen für mehrere Maschinen nicht direkt, was es fast unmöglich macht, in Produktionsumgebungen zu verwenden. Natürlich gibt es viele potenzielle Bereiche, z. B. direkt das gleiche Paket von der Entwicklungsumgebung in die Produktionsumgebung. Es gibt auch einige Docker -Laufzeitfunktionen, die auch für Produktionsumgebungen nützlich sind. Im Allgemeinen gibt es im Produktionsumfeld derzeit nicht mehr Vorteile als Vorteile. Dies bedeutet nicht, dass es nicht erfolgreich auf die Produktionsumgebung angewendet werden kann, aber jetzt kann nicht erwartet werden, dass sie gleichzeitig reifen und perfekt sind.
4.. Docker ist kreuzweise
Ein weiteres Missverständnis ist, dass Docker an jedem Betriebssystem und jeder Umgebung arbeitet. Dies kann aus einer Analogie von Behältern zum Laden und Entladen von Waren herrühren, aber die Beziehung zwischen Software und Betriebssystemen ist nicht so einfach und direkt wie die Position des Schiffes.
Tatsächlich ist Docker nur eine Technologie unter Linux. Darüber hinaus ist Docker auf bestimmte Kernelfunktionen angewiesen und muss über die neueste Version des Kernels verfügen. Basierend auf den Unterschieden zwischen verschiedenen OSOs, wenn Sie nicht die niedrigsten gemeinsamen Merkmale für OSS verwenden, werden Sie auf viele störende Probleme stoßen. Diese Probleme haben möglicherweise nur eine Inzidenz von 1%, aber wenn Sie auf mehreren Servern einsetzen, ist auch 1% tödlich.
Obwohl Docker nur unter Linux ausgeführt wird, kann es auch unter OS X oder Windows verwendet werden. Durch die Verwendung von Boot2Docker wird ein Linux -Virtual -Computer auf einem OS X- oder Windows -Computer ausgeführt, sodass Docker in diesem virtuellen Computer ausgeführt werden kann.
5. Docker verbessert die Bewerbungssicherheit
Es ist auch ein Missverständnis, dass Docker die Sicherheit des Code- und Lieferprozesses verbessern kann. Dies ist auch der Unterschied zwischen einem realen Container und einem Container auf einer Software. Docker ist eine Containerisierungstechnologie, die Orchestrierungsmethoden hinzufügt. Linux -Container haben jedoch einige Sicherheitslücken, die angegriffen werden können. Docker fügt diesen Schwachstellen keine Sicherheitsebenen oder Patches hinzu. Es ist kein Hosenhemd, das Anwendungen schützen kann.
Aus Java -Sicht
Einige Java -Entwickler haben begonnen, Docker zu verwenden. Einige von Dockers Funktionen erleichtern es uns, skalierbare Kontexte zu erstellen. Im Gegensatz zu Uber-Jar kann Docker Ihnen dabei helfen, alle Ihre Abhängigkeiten (einschließlich JVM) in ein Image zu veröffentlichen. Dies ist auch das Faszinierendste an Docker für Entwickler. Dies wird jedoch auch einige versteckte Gefahren bringen. Im Allgemeinen müssen Programmierer es auf unterschiedliche Weise und Code überwachen, debuggen, verbinden, einstellen ... Wenn Sie Docker verwenden, müssen diese zusätzliche Arbeiten erfordern.
Zum Beispiel möchten wir JConsole verwenden, das auf JMX -Funktionen beruht, da JMX Netzwerke benötigt, um RMI zu verwenden. Es ist nicht sehr direkt, wenn Sie Docker verwenden, und Sie benötigen einige Fähigkeiten, um den erforderlichen Port zu öffnen. Wir stellten zunächst fest, dass das Problem darin bestand, dass wir, als wir eine Docker -Bewerbung für Takipi erstellen wollten, ein Hintergrundprogramm außerhalb des JVM im Container durchführen mussten. Detaillierte Lösung auf GitHub.
Ein weiteres ernstes Problem ist, dass die Leistungsstimmung von Docker -Containern ziemlich schwierig ist. Wenn Sie Container verwenden, wissen Sie nicht, wie viel Speicher für jeden Container zugewiesen wird. Wenn Sie 20 Container haben, wird ihnen der Speicher auf eine Weise zugeteilt, die Sie ungewiss sind. Wenn Sie vorhaben, den Heap mit Parameter -xmx einzustellen, ist dies schwierig, da die Verarbeitung des JVM im Docker -Container von der Fähigkeit abhängt, den dem Container zugewiesenen Speicher automatisch zu erhalten. Die Leistungsstimmung ist fast unmöglich, wenn Sie nicht wissen, wie viel Speicher zugewiesen wird.
abschließend
Docker ist eine sehr interessante Technologie und verfügt über einige reale und effektive Nutzungsszenarien. Als aufstrebende Technologie braucht es auch viel Zeit, um fehlende Funktionen und bekannte Fehler zu lösen. In diesem Bereich gibt es jetzt in der Tat viel Hype. Aber denken Sie daran, der Hype ist kein Erfolg ~
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!