Docker - nicht nur für Hipster.

Docker - nur für Hipster? - Eine Beleuchtung des Themas

Docker - nicht nur für Hipster.

Docker. Eines von vielen Buzzwords wenn es um Cloud geht. Im Zusammenhang mit Cluster-Management-Tools scheint es nichts zu geben, was nicht mit Docker gelöst werden kann. Doch ist das nur was für Hipster? Ist das was für normale Entwickler oder kleinere Unternehmen?

At the beginning

Am Anfang war ich etwas skeptisch was Docker angeht. Wieder ein Buzzword? Wieder eine Technologie die nach ihrem enormen Hype in der Gruft der IT verschwindet? - Das war vor ca. 1 1/2 Jahren. Ich würde mal sagen wenn man nicht die letzten Jahre abgeschieden unter einem Stein verbracht hat sollte man mitbekommen haben, das dem nicht so ist. Doch musst es das auch gut? - Ist es ein Wundermittel?

Wundermittel oder nicht?

In gewisser Weise würde ich sagen, ja. Es ist ein Wundermittel für die schnelle Bereitstellung von Software ohne große Überraschung. Ich spreche hier von dem Klassiker - works on my machine.

In ungefähr so :)

Zudem ist Docker eine echte Hilfe für komplexe Konfigurationen oder Anwendungen. So habe ich zum Beispiel fast meine komplette Infrastruktur und Service-Landschaft auf Docker umgestellt. Gerade beim Mail-Server ist das eine echt wahnsinnig große Hilfe.

Aber auch im Umfeld meines Jobs leistet Docker ziemlich gute Arbeit, es ermöglicht schnelle Deployments ohne große Überraschungen und eine stabile Build-Umgebung. So kann jeder Entwickler seine Software mit seinem entsprechendne Software-Stack so bauen wie er will, Docker sei Dank.

In Kombination mit Orchestrierung-Tools wie Kubernetes und was noch so rumschwirrt wird das ganze auch noch so skalierbar, das man sich schon fragt wie es ohne ging.

Willst du mir das grad verkaufen?

Jein, ich bin nur vom Kritiker zum wahren Docker-Fanboy mutiert. Egal ob für Entwicklung, Betrieb oder Builds im CI-Umfeld. Docker ist überall und das ist gut so, weil es sinnvoll ist.

Wo ist der Haken?

Natürlich braucht Docker etwas mehr Liebe in Sachen Konfiguration und Absicherung. Standardmäßig gibt er Ports bei iptables frei, das kann man deaktivieren, wenn man es weiß. Wobei das mittlerweile bekannt ist und auch relativ einfach via --iptables=false in den Startup-Arguments konfiguriert ist.

In Sachen Ressourcen ist es allerdings erstaunlich wenig Overhead. Es läuft mit der fast nahezu identischen Performance wie eine native Anwendung bzw. direkt wie auf dem Host. Die Startup-Dauer kann dafür allerdings je nach Design des Containers auch mal länger ausfallen.

Schon gehypet? Richtig bock?

Dann ist es gut so und wenn nicht, hast du nicht richtig gelesen? Das ist die Revolution. Okay vielleicht nicht ganz so krass, aber es hat mein Leben und das vieler Entwickler und Firmen weltweit verbessert und in gewisser Weise revolutioniert.

Wo fang ich an?

Am besten solltest du solide Linux-Kenntnisse mitbringen. Aber mal unter uns, jeder der anfängt auf Windows mit Docker produktiv zu werden hat einen an der Waffel.

Dann wäre es ein guter Anlaufpunkt die Seite von Docker aufzurufen (Surprise!) -> https://docs.docker.com/

Direkt als nächsten Step würde ich docker-compose empfehlen, kurz gesagt ist es Docker im Dateiformat. Man arbeitet mit yml-Dateien die auch noch skalierbar sind (wie geil ist das denn?!) Beispiel gefällig? - Bitte sehr:

Das ganze erlaubt einem dann auch Services in Bundles zu packen, verlinken und gemeinsam zu starten und verwalten. Was einem erlaubt Dienste einfacher zu verwalten ohne den Überblick zu verlieren. Und das ohne gleich ein ganzes Cluster aufsetzen zu müssen - weil nicht jede Hobbypage braucht LoadBalancing bis zum Anschlag ;)

Zum Schluss noch ein paar Empfehlungen und Erfahrungen

Mehrere Container für einen Kontext sind nicht zwingend ein Overkill.

Es ist kein Problem oder eine Bad Practice z. B. eine Anwendung bzw. die Dienste einer Anwendung als einzelne Container zu betreiben. Simples Beispiel: eine Homepage.

Nehmen wir an sie besteht aus nginx als WebServer, PgSQL als Datenbank und PHP für die REST-API und Server-Side-Rendering. Man könnte natürlich alles in einen Container verpacken und benutzen.

Es spricht aber nichts dagegen für jeden dieser Dienste einen eigenen Container zu nutzen, da diese einzeln z. B. neugestartet und aktualisiert werden können ohne gleich die gesamte Website lahmzulegen, z. B. kurzfristig zwei Instanzen hochfahren, eine neuere Version und die alte dann zu killen. Oder ganz stupide um besser Überblick und Kontrolle über die Container als solches zu haben.

Bestes Beispiel für so ein Vorgehen ist mailcow (https://mailcow.email/), das Projekt erstellt hierbei auch für jeden Dienst einen eigenen Container der via docker-compose zu einem großen ganzen wird.

Docker ist keine BlackBox oder TrashBox für alte Software oder Frameworks

Serviervorschlag

Docker bitte nicht dafür missbrauchen seine alte marode Software abgekapselt im Hinterhof zu betreiben. Das macht die Anwendung nicht besser. Nicht eine Version von z. B. Java benutzen und dann bis zum St. Nimmerleins-Tag laufen lassen. Es mag Sinn machen Legacy-Anwendungen zu isolieren und weiter betreiben zu können, aber das sollte stets die Ausnahme sein. Docker hat es nicht verdient so missbraucht zu werden.

Upgrades sind nicht optional

Eine Schande sowas noch sagen zu müssen, aufgrund einiger Erfahrungen mit Kollegen ... nur weil eine Anwendung in einem Container läuft ist sie nicht automatisch immun gegen Angriffe aller Art. Upgrades sind meistens immer noch der einzige Weg Fehler in Frameworks oder Anwendungen wirklich zu patchen. Und bei Docker ist es ein Aufwand von wenigen Minuten eine neue Version einuzuspielen oder kurz zu testen.