Docker – der „Gamechanger“
Apr 24, 2019 | by Lars Vornholt | 0 Comments

Docker the game changer

Wie Docker mein Leben als Entwickler verändert hat? Um ehrlich zu sein – komplett!

Bevor ich anfange zu erklären, warum und wie, stellen wir die offensichtliche Frage – Was ist Docker? Docker ist die weltweit führende Containerisierungs-Plattform, und ihre Vision ist „Erstellen, Bereitstellen und Ausführen einer beliebigen Anwendung, von jedem Ort aus“, indem sie die Unabhängigkeit zwischen Anwendung und Infrastruktur ermöglicht.

Neben den offensichtlichen und bekannten Vorteilen der Containerisierung

  • Kontinuierliche Bereitstellung
  • Einfache, kontinuierliche Integration
  • Entwicklung und Komponententest in produktionsnaher Umgebung
  • Ein Paket für alle Stufen
  • Einfache Verwaltung mit Orchestrierungssystemen wie Docker Swarm, Kubernetes, Amazon Elastic Compute Cloud (EC2)

hat Docker meinen täglichen Arbeitsablauf nachhaltig beeinflusst.

Wenn man die neuen Konzepte zur Cloud-Entwicklung wie The Twelve-Factor App und Continuous Integration / Continuous Delivery (CI/CD) in die laufende Software-Entwicklung einbezieht, macht es einem das Leben so viel leichter. Sowohl Versions-Rollbacks als auch Software-Updates werden wirklich zum Kinderspiel. In manchen Fällen ist es sogar noch einfacher, ein Rollback durchzuführen, als das Problem mit einem neuen Release zu beheben.

Docker vereinfacht die Verwaltung verschiedener Entwicklungsumgebungen
Neben den genannten Vorteilen der containerisierten Bereitstellung und Entwicklung hat Docker auch meine tägliche Arbeit verändert. Vorbereitete Docker Container mit vorinstallierter Software wie Datenbanken, Linux, Command Line Interface (CLI) Tools für Amazon Web Services (AWS), CloudFoundry, Kubernetes (K8s) oder einfach nur Applikationsserver wie Tomcat (inkl. Java) vereinfachen die gleichzeitige Verwaltung verschiedener Entwicklungsumgebungen auf meinem Notebook. Notebooks sind heute wirklich leistungsstarke Geräte und ich kann auf diese Weise diese Leistung während meiner Arbeit voll ausnutzen, ohne dass mehrere 40GB VMs lokal gespeichert oder auf unseren Servern gehostet werden – oft mit weniger Speicher- oder CPU-Leistung, als mein Notebook ohnehin bieten könnte. Alle diese Container laufen mit einem Minimum an Overhead und ich bin in der Lage, alle verfügbaren Ressourcen für meine eigentliche Arbeit zu nutzen.

Die systemimmanenten Fähigkeiten machen es einfach, Docker-Container mit bestimmten Testdaten (z.B. eine Datenbank mit einem Satz von Einträgen oder Testdokumenten) für jeden Testlauf meiner Komponententests zu starten. Die schnelle Systemstartzeit und die Initialisierungstechniken ermöglichen es, einen Container innerhalb weniger Sekunden zu starten. Für ein Kundenprojekt, das als MicroService-Infrastruktur konzipiert wurde, konnte ich die CI-Tools (Gitlab CI) einrichten, um Integrationstests automatisch durchzuführen, indem ich während der Build-Schritte alle Microservices startete, um einige API-Tests gegeneinander auszuführen. Dieser Build-Step prüft die API´s auf Änderungen. Der API-First Ansatz sollte solche Probleme zwar verhindern, jedoch bieten diese Art von Tests eine weitere Qualitätsprüfung in das Projekt.

Abbildung1: Integrationstest

Docker-Container mit vorinstallierter Software wie Command Line Interface (CLI) Management-Tools erlauben es mir, die benötigte Umgebung innerhalb der Docker-Laufzeit zu kapseln, ohne dass sich dies auf andere Umgebungen oder meine Notebook-Installation selbst auswirkt. Ich starte einfach den Docker-Container mit „docker start “ und verbinde mich über ssh und mein Terminalfenster befindet sich in einer ganz neuen Arbeitsumgebung, in der das K8s CLI kubectl installiert ist. Die Arbeitsumgebung ist bereit, sich mit meinem Cluster zu verbinden und ich kann direkt mit der Arbeit beginnen. Auch andere nützliche Tools wie der Swagger-Editor können lokal mit einem Docker-Container gestartet werden – besonders wenn man in einem Kundenprojekt arbeitet, in dem es nicht erlaubt ist, die in der Cloud gehostete Version zu verwenden, ist dies sehr hilfreich.

Tools wie Docker Composer machen es einfach, größere Umgebungen mit mehreren Containern zu starten, um einige Integrationstests durchzuführen.

Ich habe mit Docker-Containern sowohl in verschiedenen Kundenprojekten als auch in internen Projekten wie dem fme Contract Management oder der fme EmployeeProfileDB gearbeitet. Die fme EmployeeProfileDB ist eine Webanwendung für unsere Consultants. Es ermöglicht ihnen, ihre persönlichen Mitarbeiterprofile, die wir in unserem Verkaufsprozess verwenden, zu erstellen und zu pflegen. Anstatt Word-Vorlagen auszufüllen, geben die Anwender einfach ihre Daten ein und die App erzeugt sowohl DOCX- als auch PDF-Versionen ad-hoc mit der aktuellsten Vorlage. Obwohl diese App aus 16 Docker Containern besteht (die einige Logging und Monitoring Tools enthalten), ist sie sehr einfach zu installieren und zu warten. Vorgefertigte Container wie LibreOffice und oAuth2 Proxy sparen viel Zeit in der Entwicklungsphase.

Abbildung2: MicroService Architektur der Applikation EmployeeProfile

Wir setzen Technologien wie Docker, Kubernetes oder Pivotal Cloud Foundry intern oder in Kundenprojekten fast täglich ein. Dies hilft uns beim Aufbau von Infrastrukturen auf IaaS-Systemen und beim Aufbau von Pipelines für CI/CD, um operative Aktivitäten wie Updates, Backups und Restore/Recovery für uns und unsere Kunden zu automatisieren.

Mein Fazit nach zwei Jahren Zusammenarbeit mit Docker: Ich liebe es. Es macht mein Leben so viel einfacher und die Tage, an denen meine 160 GB SSD-Festplatte permanent voll war und ich warten musste, bis die VM kopiert und gestartet wurde, sind vorbei.

 

Erfahren Sie mehr:

> Landingpage: Container-Technologie trifft auf OpenText Documentum
> Blog: OpenText Documentum auf der AWS Plattform