UX Abo

Neuer Workshop: "UX Metrics - Erfolgsmessung im UX Design".

Zeigt her!
Close

Let’s Dockerize everything!

Warum Docker ein wichtiger Teil im Development-Workflow ist und wie der Einstieg in die Docker-Welt einfacher geht.

Bild
Dockerize everything

Ich bin sehr begeistert von Docker. Hier ein kleiner Anstoß für all jene, die sich noch nicht den Ruck gegeben haben, sich damit zu beschäftigen. Alles in allem ist Docker eine ziemlich coole Anwendung. Der Workflow beim Entwickeln wird nach initialem Setup um ein Vielfaches vereinfacht.

Das hier ist keine technische Anleitung und kein How-To.

Es sind einfach nur ein paar Basics, die erklären, warum Docker zu einem wichtigen Teil in meinem Development-Workflow wurde und die euch den Einstieg in die Docker-Welt hoffentlich erleichtern.

Was ist Docker?

Docker ist eine Freie Software zur Isolierung von Anwendungen mit Containervirtualisierung. wikipedia
Say What

Bitte was!?

Jede Software hat bestimmte Anforderungen an das zugrundeliegende Betriebssystem. Eine Webseite wird von außen nur über einen Webserver erreichbar sein. PHP Code wird nur ausgeführt werden, wenn am System ein PHP Interpreter installiert ist, und eine Java Applikation wird nur funktionieren, wenn ein Java Framework vorhanden ist. 

Docker kümmert sich darum, all diese Dependencies einer Anwendung in ein sogenanntes “Container-Image” zu packen. Das Image ist eine ausführbare Datei, welche alles notwendige enthält, um die Applikation auszuführen. Weitere Infos zu Docker findet ihr hier: Docker.com – What is docker?

Das Container-Image enthält also das Betriebssystem, die Laufzeitumgebung, alle benötigten Libraries und Programme, um die Applikation auszuführen. Der Docker-Container “glaubt” also, ein eigenes System zu sein, obwohl er doch eigentlich nur ein Prozess am Host-System ist.

Lassen wir das mal so stehen, und schauen uns ein klassisches Webhosting Beispiel an:

Auf einem Ubuntu Server soll ein WordPress CMS gehostet werden. Die Serveranforderungen von WordPress können auf der Requirements-Seite von WordPress nachgelesen werden.

Die Version 5.3.2 hat folgende Requirements:

  • PHP >= 7.3
  • MySQL >= 5.6 oder MariaDB >= 10.1
  • Webserver (nginx oder Apache2)

Jetzt denkt ihr euch bestimmt:
Kein Problem! Das Ganze kann man doch locker flockig am Server installieren!

Wozu also Docker?!

1. Scalability

Mithilfe von Docker kann man kann beliebig viele Container-Instanzen aus einem Docker-Image erstellen. Das bedeutet, man kann 10 Web Server Instanzen gleichzeitig laufen lassen, einen Load-Balancer davor schalten und somit die Last auf diese 10 Instanzen verteilen.

Anwendungen, wie Docker Swarm und Kubernetes stellen einfache und intuitive Plattformen zur Verfügung, wie die Container sogar auf mehrere physische Server verteilt werden können. Mehr dazu findet ihr auf deren Webseiten.

Dieser Punkt wird dann essentiell, wenn auf den Anwendungen sehr viele Zugriffe zugleich passieren. 

Für kleinere Projekte sind die nächsten beiden Use-Cases relevanter:

2. Entwicklungsumgebungen — Lokal, Dev, Test, Staging, Production

Es kommt (gottseidank) nur selten vor, dass Änderungen der Codebase am Live-Server durchgeführt werden. Eher wird lokal (am Rechner der Entwickler) entwickelt, die Änderungen werden dann Schritt für Schritt auf die unterschiedlichen Umgebungen deployed.

Es gibt also nicht einen Server, sondern eine lokale Entwicklungsumgebung und vier Server (Dev, Test, Staging, Produktion). Man müsste also nicht einen, sondern vier Server aufsetzen. Lokal hat man meisten überhaupt mehr Projekte mit unterschiedlichsten System-Requirements. Und hier kommt Docker zum Einsatz:

Docker-Images enthalten bekanntlich alle Dependencies, um eine Anwendung auszuführen.

Wenn man Applikationen als Docker-Image bereitstellt, ist sichergestellt, dass die Applikation im Container läuft — alle Dependencies sind ja im Container geladen. Das Image wird lokal einmal erstellt, und kann auf den Servern einfach gestartet werden. 

3. Hosting mehrerer Applikationen mit unterschiedlichen Systemanforderungen

Weiters wird ein Server meist nicht nur zum Hosting einer Applikation genutzt. Viel wahrscheinlicher ist es, dass mehrere gleichzeitig auf einem Server laufen sollen. 

Bsp:

  • Frontend App (Angular 9)
  • Frontend App (Angular 7)
  • WordPress (<= PHP 7.0 weil ein benötigtes Plugin noch nicht PHP 7.3 unterstützt; MySQL 5.7)
  • Drupal 8.8.0 (>= PHP 7.3, MySQL 8.0)
  • Laravel 6.0 (PHP >= 7.2)
  • KeyCloak (Java 8 JDK & MySQL 8.0) 

In diesem Szenario stößt man schnell mal auf Probleme beim Server-Setup. Für Drupal und Laravel wird PHP 7.3 oder 7.4 benötigt. WordPress funktioniert aber nur bis PHP 7.0. Bei der  MySQL Datenbank besteht das gleiche Problem. Auch die Frontend Apps könnten unterschiedliche node/npm Versionen benötigen.

Jetzt gibt es 2 mögliche Wege:

  • für jede Applikation einen neuen Server aufsetzen.
  • die Applikationen isolieren, und als Container parallel laufen lassen.

Da ersteres aus diversen Gründen (Preis, Ressourcen, Umwelt, ..) nicht praktikabel ist, können auch hier Docker Container Abhilfe leisten.

Die beiden Frontend-Apps werden je mit der richtigen Node-Version in ein Docker-Image gepackt. Für die beiden nötigen Datenbank-Versionen wird je ein Image erstellt. Ein weiteres Image wird mit WordPress, einem Webserver (z.B. Apache2) und PHP 7.0 erstellt. Drupal und Laravel kommen ebenfalls je in ein Image mit einem Webserver und PHP. In dem Fall allerdings in der Version 7.4. Keycloak wird in ein Image mit der Java 8 JDK gepackt.

Gesamt gibt es nun 6 Images, in denen die jeweils relevanten System-Requirements installiert, und die Codebase der Applikation geladen ist. Diese Images können nun auf den Servern einfach via “docker run” gestartet werden.

Um die Kommunikation zwischen Containern zu ermöglichen, können Docker Netzwerke angelegt werden. Drupal und Keycloak würden in unserem Fall mit dem MySQL 8.0 Container kommunizieren, und WordPress mit dem MySQL 5.7 Container.

Sum up

Alles in allem ist Docker eine ziemlich mächtige Anwendung. Falls du noch keine Erfahrung mit Docker hast, findest du viele Informationen in der offiziellen Docker Dokumentation. Falls du bereits einige Projekte mit Docker, oder einer anderen Container-Virtualisierung-Software, umgesetzt hast, schreib’ uns doch bitte deine größten “Wow”-Erfahrungen in den Kommentaren! 

Du willst mit jemanden über das Thema plaudern?

Einen kostenlosen Termin mit CEO Susanne vereinbaren!

Daniel

Meine Rolle bei Liechtenecker: Backend Development🤓 Wenn es weder IT noch Digitalisierung gäbe, wäre mein Beruf: Musiker Mein Herz schlägt für: PHP Development, Progressive Metal, Kaffee

Interesse mit uns zu arbeiten?

Lass uns plaudern …

oder vereinbare gleich mit unserer CEO Susanne einen kostenlosen Termin.