Warum Sie Docker und Container verwenden sollten

Ein 1981 veröffentlichtes Buch mit dem Titel "  Nailing Jelly to a Tree" beschreibt Software als "nebulös und schwer in den Griff zu bekommen". Das war 1981 so, und seitdem ist es fast vier Jahrzehnte her. Software, unabhängig davon, ob es sich um eine von Ihnen gekaufte oder von Ihnen selbst erstellte Anwendung handelt, ist weiterhin schwer bereitzustellen, schwer zu verwalten und schwer auszuführen.

Docker-Container bieten eine Möglichkeit, Software in den Griff zu bekommen. Sie können Docker verwenden, um eine Anwendung so zu verpacken, dass ihre Bereitstellungs- und Laufzeitprobleme - wie sie in einem Netzwerk verfügbar gemacht werden, wie die Verwendung von Speicher und Speicher sowie E / A verwaltet und wie Zugriffsberechtigungen gesteuert werden - behandelt werden außerhalb der Anwendung selbst und auf eine Weise, die für alle "containerisierten" Apps konsistent ist. Sie können Ihren Docker-Container auf jedem Betriebssystem-kompatiblen Host (Linux oder Windows) ausführen, auf dem die Docker-Laufzeit installiert ist.

Docker bietet neben dieser praktischen Kapselung, Isolierung, Portabilität und Steuerung viele weitere Vorteile. Docker-Container sind klein (Megabyte). Sie beginnen sofort. Sie verfügen über eigene Mechanismen zur Versionierung und Wiederverwendung von Komponenten. Sie können problemlos über den öffentlichen Docker Hub oder das private Repository freigegeben werden.

In diesem Artikel werde ich untersuchen, wie Docker-Container das Erstellen und Bereitstellen von Software erleichtern - die Probleme, mit denen sich Container befassen, wie sie sich mit ihnen befassen, wann sie die richtige Antwort auf das Problem sind und wann nicht.

Vor Docker-Containern

Seit vielen Jahren wird Unternehmenssoftware in der Regel entweder auf „Bare Metal“ (dh auf einem Betriebssystem installiert, das die vollständige Kontrolle über die zugrunde liegende Hardware hat) oder auf einer virtuellen Maschine (dh auf einem Betriebssystem installiert, das die zugrunde liegende Hardware gemeinsam nutzt) bereitgestellt mit anderen "Gast" -Betriebssystemen). Die Installation auf Bare Metal machte es natürlich schwierig, die Software zu bewegen und zu aktualisieren - zwei Einschränkungen, die es der IT schwer machten, schnell auf Änderungen der Geschäftsanforderungen zu reagieren.

Dann kam die Virtualisierung. Mit Virtualisierungsplattformen (auch als „Hypervisoren“ bezeichnet) konnten mehrere virtuelle Maschinen ein einziges physisches System gemeinsam nutzen, wobei jede virtuelle Maschine das Verhalten eines gesamten Systems mit eigenem Betriebssystem, Speicher und E / A isoliert nachahmte . Die IT könnte jetzt effektiver auf Änderungen der Geschäftsanforderungen reagieren, da VMs geklont, kopiert, migriert und hoch- oder heruntergefahren werden könnten, um die Nachfrage zu befriedigen oder Ressourcen zu schonen.

Virtuelle Maschinen trugen auch zur Kostensenkung bei, da mehr VMs auf weniger physischen Maschinen konsolidiert werden konnten. Ältere Systeme, auf denen ältere Anwendungen ausgeführt werden, könnten in VMs umgewandelt und physisch außer Betrieb genommen werden, um noch mehr Geld zu sparen.

Virtuelle Maschinen haben jedoch immer noch einige Probleme. Virtuelle Maschinen sind groß (Gigabyte) und enthalten jeweils ein vollständiges Betriebssystem. Nur so viele virtualisierte Apps können auf einem einzigen System konsolidiert werden. Die Bereitstellung einer VM nimmt noch viel Zeit in Anspruch. Schließlich ist die Portabilität von VMs begrenzt. Ab einem bestimmten Punkt sind VMs nicht mehr in der Lage, die Geschwindigkeit, Flexibilität und Einsparungen zu erzielen, die schnelllebige Unternehmen verlangen.

Vorteile für Docker-Container

Container funktionieren ein wenig wie VMs, jedoch weitaus spezifischer und detaillierter. Sie isolieren eine einzelne Anwendung und ihre Abhängigkeiten - alle externen Softwarebibliotheken, die die App ausführen muss - sowohl vom zugrunde liegenden Betriebssystem als auch von anderen Containern. Alle containerisierten Apps verwenden ein einziges gemeinsames Betriebssystem (entweder Linux oder Windows), sind jedoch voneinander und vom gesamten System unterteilt.

Die Vorteile von Docker-Containern zeigen sich an vielen Stellen. Hier sind einige der wichtigsten Vorteile von Docker und Containern:

Docker ermöglicht eine effizientere Nutzung der Systemressourcen

Instanzen von containerisierten Apps verbrauchen viel weniger Speicher als virtuelle Maschinen, sie starten und stoppen schneller und können viel dichter auf ihrer Host-Hardware gepackt werden. All dies bedeutet weniger IT-Ausgaben.

Die Kosteneinsparungen variieren je nachdem, welche Apps im Spiel sind und wie ressourcenintensiv sie sein können. Container sind jedoch ausnahmslos effizienter als VMs. Es ist auch möglich, Kosten für Softwarelizenzen zu sparen, da Sie viel weniger Betriebssysteminstanzen benötigen, um dieselben Workloads auszuführen.

Docker ermöglicht schnellere Softwarebereitstellungszyklen

Unternehmenssoftware muss schnell auf sich ändernde Bedingungen reagieren. Dies bedeutet sowohl eine einfache Skalierung zur Deckung der Nachfrage als auch eine einfache Aktualisierung, um neue Funktionen hinzuzufügen, die das Unternehmen benötigt. 

Docker-Container machen es einfach, neue Softwareversionen mit neuen Geschäftsfunktionen schnell in die Produktion zu bringen - und bei Bedarf schnell auf eine frühere Version zurückzusetzen. Sie erleichtern auch die Implementierung von Strategien wie Blau / Grün-Bereitstellungen.

Docker ermöglicht die Portabilität von Anwendungen

Wo Sie eine Unternehmensanwendung ausführen, ist wichtig - hinter der Firewall, um die Dinge in der Nähe und sicher zu halten. oder in einer öffentlichen Cloud für einfachen öffentlichen Zugriff und hohe Elastizität der Ressourcen. Da Docker-Container alles enthalten, was eine Anwendung zum Ausführen benötigt (und nur diese Dinge), können Anwendungen problemlos zwischen Umgebungen verschoben werden. Auf jedem Host, auf dem die Docker-Laufzeit installiert ist - sei es ein Laptop eines Entwicklers oder eine öffentliche Cloud-Instanz -, kann ein Docker-Container ausgeführt werden.

Docker glänzt für die Microservices-Architektur

Leichte, tragbare und in sich geschlossene Docker-Container erleichtern das Erstellen zukunftsweisender Software, sodass Sie nicht versuchen, die Probleme von morgen mit den Entwicklungsmethoden von gestern zu lösen.

Einer der Softwaremuster, die Container erleichtern, sind Microservices, bei denen Anwendungen aus vielen lose gekoppelten Komponenten bestehen. Durch die Zerlegung traditioneller, „monolithischer“ Anwendungen in separate Services ermöglichen Microservices die separate Skalierung, Änderung und Wartung der verschiedenen Teile einer Branchenanwendung - von separaten Teams und auf separaten Zeitplänen, sofern dies den Anforderungen des Unternehmens entspricht Geschäft. 

Container müssen keine Microservices implementieren, eignen sich jedoch perfekt für den Microservices-Ansatz und für agile Entwicklungsprozesse im Allgemeinen.

Probleme, die Docker-Container nicht lösen

Das erste, was Sie bei Containern beachten sollten, ist der gleiche Ratschlag, der für jede Softwaretechnologie gilt: Dies ist keine Wunderwaffe. Docker-Container allein können nicht jedes Problem lösen. Speziell:

Docker behebt Ihre Sicherheitsprobleme nicht

Software in einem Container kann standardmäßig sicherer sein als Software, die auf blankem Metall ausgeführt wird. Dies bedeutet jedoch, dass ein Haus mit verschlossenen Türen sicherer ist als ein Haus mit unverschlossenen Türen. Es sagt nichts über den Zustand der Nachbarschaft, die sichtbare Anwesenheit von Wertsachen, die einen Dieb verführen, die Routinen der dort lebenden Menschen und so weiter. Container können einer App eine Sicherheitsebene hinzufügen, jedoch nur als Teil eines allgemeinen Programms zum Sichern einer App im Kontext.

Docker verwandelt Anwendungen nicht auf magische Weise in Microservices

Wenn Sie eine vorhandene App containerisieren, kann dies den Ressourcenverbrauch reduzieren und die Bereitstellung vereinfachen. Das Design der App oder die Interaktion mit anderen Apps wird jedoch nicht automatisch geändert . Diese Vorteile ergeben sich nur aus der Zeit und dem Aufwand der Entwickler, nicht nur aus dem Auftrag, alles in Container zu verschieben.

Wenn Sie eine monolithische App oder eine App im SOA-Stil der alten Schule in einen Container legen, erhalten Sie eine alte App in einem Container. Das macht es für Ihre Arbeit nicht nützlicher. Wenn überhaupt, könnte es weniger nützlich sein. 

Docker ist kein Ersatz für virtuelle Maschinen

Ein hartnäckiger Mythos von Containern ist, dass sie VMs überflüssig machen. Viele Apps, die früher in einer VM ausgeführt wurden, können in einen Container verschoben werden. Dies bedeutet jedoch nicht, dass alle Apps dies können oder sollten. Wenn Sie sich beispielsweise in einer Branche mit hohen regulatorischen Anforderungen befinden, können Sie möglicherweise keine Container gegen VMs austauschen, da VMs mehr Isolation bieten als Container.

Der Fall für Docker-Container

Unternehmensentwicklungsarbeit ist bekannt dafür, dass sie versteckt ist und nur langsam auf Änderungen reagiert. Unternehmensentwickler scheuern sich ständig an solchen Einschränkungen - den Einschränkungen, die ihnen von der IT auferlegt werden, den Anforderungen, die das gesamte Unternehmen an sie stellt. Docker und Container bieten Entwicklern mehr Freiheit, nach der sie sich sehnen, und bieten gleichzeitig Möglichkeiten zum Erstellen von Geschäftsanwendungen, die schnell auf sich ändernde Geschäftsbedingungen reagieren.