Docker, warum brauche ich das?

In diesem zweiten Artikel in meiner Reihe Schwimmen mit den rosa Walen möchte ich zu erst beschreiben warum es Docker überhaupt gibt und welches Problem damit gelöst werden soll.

Hier meine persönlich Zusammenfassung zu der Frage. (Wie immer rein persönlicher Natur ohne Anspruch auf Vollständigkeit)

Jeder möchte heute schneller und dynamischer Software entwickeln und neue Funktionen an den Markt / Nutzer bringen. Wie nur kann man schneller werden? Dies hat technologische und organisatorische Aspekte. In diesem Beitrag verweile ich auf der technischen Seite.

Auf der technischen Seite erreicht man Geschwindigkeit wenn man Abschied von monolithischen Systemen nimmt und hin zu kleinen unabhängigen Service einschlägt. Netflix ist von einer großen Anwendung in 2008 zu über 500 granularen Services in der Cloud transformiert und führt heute zwischen 100 und 1000 Updates pro Tag durch. Anstatt unangenehme Momente wie Updates zu vermeiden gewöhnt man sich daran da man sie so oft wie möglich durchführt. Fail fast

Das folgende einfache Bild soll es darstellen. Habe ich eine große Anwendung mit einem Fehler laufe ich Gefahr die ganze Anwendung zu gefährden. Testen und Updates sind sehr kritisch. Habe ich eine Anwendung in der das Userinterface durch viele kleine Anwendungen mit einer eigenen Datenhaltung gespeist werden kann ich auch bei Ausfall eines Services immer noch “viel” darstellen.

Microservices

Bei dieser Anzahl von Services kann natürlich nicht jeder Service auf einer eigenen virtuelle Maschine mit komplettem Softwarestack laufen. Da bedarf es eines anderen Mechanismus.

Eine Möglichkeit schnell flexible Umgebungen für Services bereitzustellen sind zum Beispiel die Container von Docker.

Wie verhalten sich jetzt diese Container im Vergleich zu klassischer Virtualisierung?

Microservices

Bei der klassischen Virtualisierung hat jede Anwendung einen kompletten Betriebssystemstack auf einer Virtualisierungsschicht. Bei Dockercontainer teilen sich die einzelnen Services so viel wie möglich über die Docker Engine und sind trotzdem komplett von einander getrennt.

Wesentliche Unterschiede Container versus Virtualisierung (da gib es natürlich noch weitere)

  • Kein Windows OS im Container möglich. Guests können nur Linux sein
  • Schneller Neustart bei Containern
  • Container können blitzschnell aufgebaut und ausgetauscht werden.
  • Container haben geringeren OS Overhead und benötigen geringere HW Ressourcen

Damit schimmert wahrscheinlich auch durch, dass klassische Virtualisierung auch weiterhin notwendig sein wird. Habe ich eine große Anwendung der ich dedizierte Ressourcen bereitstellen möchte (und die womöglich nur auf Windows läuft) brauche ich auch weiterhin diese Virtualisierung. Es kann auch sinnvoll sein Docker Server auf einer Virtualisierung laufen zu lassen.

Plane ich allerdings für neue Anwendungen und möchte diese agil und serviceorientiert entwickeln oder diese Services nutzen komme ich an Docker aktuell nicht vorbei. Ich bekomme die meiste Last in kürzester Geschwindigkeit gut verteilt.

In dem nächsten Beitrag möchte ich darstellen wie so etwas praktisch aussehen könnte