Docker
Docker hat die Softwarelandschaft tiefgreifend verändert und ist heute ein wichtiger Baustein für Microservices und Cloud-Architekturen. Vor Docker gab es oft für Entwickler das gleiche Problem: „Auf meinem Computer läuft es, aber nicht auf dem Server“. Das lag daran, dass Software meist von bestimmten Bibliotheken, Laufzeitumgebungen und Konfigurationsdateien abhängig ist, die man erst aufwändig installieren musste um die Software zum Laufen zu bringen. Dabei konnten andere Installationspfade und kleine Versionsunterschiede bereits zu subtilen Fehlern führen.
Docker schafft hier Abhilfe. Mit Docker kann man eine Software mit allen ihrer Abhängigkeiten in sogenannten Containern kapseln und isoliert ausführen. Docker besteht dabei aus drei Komponenten: Auf einem Docker-Image werden die Anwendung und alle benötigten Bibliotheken, Laufzeitumgebungen und Konfigurationsdateien installiert. Das Image kann schließlich auf einem Container kopiert werden. Das übernimmt die Docker-Runtime, eine Laufzeitumgebung, welche dafür sorgt, dass die Container gestartet, ausgeführt und verwaltet werden können.
Viele Microservices und Cloud-Umgebungen basieren heute maßgeblich auf dieser Architektur. Jeder Dienst kann unabhängig in einem eigenen Container laufen und über Web-Protokolle miteinander kommunizieren. Wenn jeder Dienst in einer isolierten Umgebung mit exakt definierten Abhängigkeiten läuft, minimiert es die möglichen Konflikte mit anderer Software. Außerdem benötigt ein Docker-Container weniger Ressourcen im Vergleich zu virtuellen Maschinen (VM) und kann damit effizienter laufen und besser skaliert werden.
Da der Quellcode von Docker als Open Source veröffentlicht wurde, konnte sich schnell eine große Community und ein Ökosystem von darauf aufbauenden Anwendungen entwickeln. So können mit Kubernetes Container effizienter verwaltet und überwacht werden und für viele Entwicklerwerkzeuge existieren Docker-Integrationen. Docker hat Software portabler, skalierbarer, reproduzierbarer und teamfreundlicher gemacht und eignet sich perfekt für dynamische, skalierbare Systeme – vor allem im Cloud-Umfeld.